通过JDBC这个Java API以统一的方式来连接不同的数据库,可以跨平台,跨数据库,然后通过Statement对象执行标准的SQL语句,并可以获得SQL语句访问数据库的结果。即三个本工作:建立连接,执行SQL语句,获得执行结果
组成JDBC的两个包:java.sql和javax.sql
建立连接:
第一步:注册驱动--确定要操作的是哪个数据库
普通注册驱动:DriverManager.registerDriver(new Driver());
由于Driver类的静态代码块中有注册一次驱动,所以导致注册两次驱动
改进方式:Class.forName("com.mysql.jdbc.Driver");
两个好处:
1.避免了注册两次驱动
2.驱动是以字符串形式声明,可以放到配置文件中,使用程序去读取配置文件的信息。将来用其他数据库时,不用修改源码,只需修改配置文件
第二步:建立与数据库的连接
conn = DriverManager.getConnection("jdbc:mysql://localhost:3306/xxx","user","password");
建立连接返回的是Connection对象,这个对象表示与数据库服务器建立的连接,后续操作都是基于这个对象,常用方法:
createStatement():创建向数据库发送sql的Statement对象
prepareStatement(sql):创建向数据库发送预编译sql的PreparedStatement对象
prepareCall(sql):创建执行存储过程的callableStatement对象
setAutoCommit(boolean autoCommit):设置事务是否自动提交
commit():在链接上提交事务
rollback():在此链接上回滚事务
第三步:获得可以发送SQL语句的Statement对象
Statement stmt = conn.createStatement();
State,PreparedState,CallableStatement区别和联系:
1.三者都是接口,interface
2.Statement继承自Wrapper,PreparedStatement继承自Statement,CallableStatement继承自PreparedStatement
3. Statement接口提供了执行语句和获取结果的基本方法
Preparement接口添加了处理IN参数的方法
CallableStatement接口添加了处理OUT参数的方法
4. Statement:普通的不带参数的查询SQL,支持批量更新批量删除
PreparedStatement:可变参数的SQL,编译一次,执行多次,效率高,安全性好,有效防止SQL注入等问题,支持批量更新批量删除
CallableStatement:支持带参数的SQL操作,支持调用存储过程,提供了对输出和输入/输入参数的支持
第四部:执行语句,获得结果集对象
ResultSet rs = stmt.executeQuery();
executeQuery:返回结果集ResultSet
executeUpdate:执行给定SQL语句,语句可能为INSERT,UPDATE或DELETE局域
execute:可用于执行任何SQL语句,返回一个boolean值,表名执行该SQL语句是否返回了一个ResultSet
第五步:解析结果集
找对应的getXxx方法
第六步:释放资源
在finally块中释放
if(rs !=null){
try{rs.close()}catch(SQLExecption e){e.printStackTrace();}
re = null;
}
if(stmt !=null){
try{stmt .close()}catch(SQLExecption e){e.printStackTrace();}
stmt = null;
}
if(conn !=null){
try{conn.close()}catch(SQLExecption e){e.printStackTrace();}
conn = null;
}
出现异常需要回滚,在catch块中调用rollback()
批处理:使用Batch,处理多条SQL语句
stmt.addBatch("create database xxx");
stmt.addBatch("use xxx");
stmt.addBatch("create table...");
stmt.executeBatch();
事务控制:
conn.setAutoCommit(false) 相当于start transaction,开启事务
一系列操作。。。。
conn.commit()
catch块rollback
连接池:
实现DataSource接口,创建一些连接conn,按需使用和送回