概述
JDBC(Java DataBase Connectivity) Java数据库连接,其实就是利用java语言/程序连接并访问数据库的一门技术,之前我们可以通过CMD或者navicat等工具连接数据库,但在企业开发中,更多的是通过程序(java程序)连接并访问数据库,通过java程序访问数据库,就要用到JDBC这门技术。
访问数据库
(1)注册数据库驱动
Class.forName(com.mysql.jdbc.Driver);
(2)获取数据库连接
Connection conn=DirverManager.getConnection
("jdbc:mysql://localhost:3306/test?characterEncoding","root","root")
(3)获取传输器
Statement stat = conn.createStatement();
(4)发送SQL到服务器执行并返回执行结果
String sql ="select * from account";
ResultSet rs = stat.executeQuery(sql);
(5)处理结果
while(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
double money = rs.getDouble("money");
System.out.println(id+":"+name+":"+money);}
(6)释放资源
rs.close();
stat.close();
conn.close();
System.out.println("Testjdbc.main()....");
常用API
(1)注册数据库驱动
Class.forName("com.mysql.jdbc.Driver");
所谓的注册驱动,就是让JDBC程序加载mysql驱动程序,并管理驱动
驱动程序实现了JDBC API定义的接口以及数据库服务器的交互的功能,加载驱动是为了方便使用这些功能。
(2)获取连接数据库的URL
Connection conn = DriverManager.getConnection
("jdbc:mysql://localhost:3306/test?characterEncoding","root","root");
DriverManager.getConnection()用于获取数据连接,返回的Connection连接对象是JDBC程序连接数据库至关重要的一个对象。
参数1:"jdbc:mysql://localhost:3306/test"是连接数据库的URL,用于指定访问哪一个位置上的数据库服务器及服务器中的哪一个数据库,具体为:
当连接本地数据库,并且端口为3306,可以简写为如下形式:
jdbc:mysql:///test
(3)Statement传输器对象
Statement stat = conn.createStatement();
该方法返回用于向数据库服务器发送sql语句的statement传输器对象
该对象提供了发送sql的方法:
executeQuery(String sql)--
用于向数据库发送查询类型的sql语句,返回一个ResultSet对象中
executeUpdate(String sql)--
用于向数据库发送更新(增加,删除,修改)类型的sql语句,返回一个int值,表示影响的行数
(4)ResultSet结果集对象
ResultSet对象用于封装sql语句查询的结果,也是一个非常重要的对象。该对象上提供了遍历数据及获取数据的方法。
--遍历数据行的方法--
next()-使指向数据行的箭头向下移动一行,并返回一个布尔类型的结果,true表示箭头指向了一行数据,false表示箭头没有指向任何数据(后面也没有数据了)
--获取数据的方法--
getInt(int columnIndex)
getInt(String columnLable)
getString(int columnIndex)
getString(String columnLable)
getDouble(int columnIndex)
getDouble(String columnLable)
getObject(int columnIndex)
getObjct(String columnLable)
--释放资源--
rs.close();
stat.close();
conn.close();
增删改查示例
新增:往simulation表中添加一个名称为john,money为3500的记录
@Test
public void testInsert() {
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try{
//注册驱动并获取连接
conn = jdbcUtil.getConn();
//获取传输器
stat = conn.createStatement();
//发送sql语句到服务器执行,并返回执行结果
String sql = "insert into simulation values(null,"john",3500)";
//处理结果
System.out.println("影响行数:"+rows);
}catch(Exception e){
e.printStackTrace();
}finally{
//通过jdbcUtil工具类中的close方法释放资源
jdbcUtil.close(conn,stat,rs);
}
}
修改:将simulation表中名称为john的记录,money修改为1500元
@Test
public void testUpdate(){
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try{
//通过工具类注册数据库并获取连接
conn = jdbcUtil.getConn();
//获取传输器
stat = conn.createStatement();
//发送sql语句到服务器执行,并返回执行结果
String sql = "update account set money=1500 where name = 'john'";
//处理结果
System.out.println("影响行数"+rows);
} catch(Exeption e){
e.printStackTrace();
}finally{
//通过工具类中的close方法释放资源
jdbcUtil.close(conn,stat,rs);
}
}
查询:查询account表中id为1的记录
@Test
public void testFindById(){
Connection conn = null;
Statement stat = null;
ResultSet rs = null;
try{
//通过工具类注册驱动并获取连接
conn = jdbcUtil.getConn();
//获取传输器
stat = conn.createStatement();
//执行sql语句,返回执行结果
String sql = "select * from account where id=1";
//处理结果
if(rs.next()){
int id = rs.getInt("id");
String name = rs.getString("name");
double money = rs.getDouble("money");
System.out.println(id+":"+name+":"+money);
}catch(Exception e){
e.printStackTrace();
}finally{
jdbcUtil.close(conn,stat,rs);
}
}
删除:删除account表中名称为john的记录
@Test
public void testDelete(){
Connection conn =null;
Statement stat = null;
ResultSet rs = null;
try{
//通过jdbcUtil工具类注册驱动并获取连接
conn = jdbcUtil.getConn();
//获取传输器
stat = conn.createStatement();
//发送sql语句到服务器执行,并返回执行结果
String sql = "delete from account where name='john'";
int rows = stat.executeUpdate(sql);
//处理结果
System.out.println("影响行数:"+rows);
}catch(Exception e){
e.printStackTrace();
}finally{
//通过jdbcUtil工具类中的close方法释放资源
jdbcUtil.close(conn,stat,rs);
}
}
PrepareStatement
在上面的增删改查操作中,使用的是Statement传输器对象,而在开发中我们用的更多的传输器对象是PreparedStatement对象,PreparedStatement是Statement的子接口,比Statement更加安全,并且能够提高程序执行的效率。
小结
总的来说JDBC就是Java数据库连接,用来规范客户端程序如何来访问数据库的,提供了诸如查询和更新数据库中数据的方法,我们通常说的JDBC是面向关系型数据库的。