JDBC:
---->六步实现java程序对数据库的操作
---->为了简化六步,出现JDBCUtils
---->为了提高并发访问效率,出现连接池Druid/c3p0,可以直接从连接池获得Connection,
并且这个时候对Connection的进行了装饰,返回的Connection自带连接池引用,
close()方法自动归还连接到连接池,
----->由于连接池技术的出现,它本身也封装了创建连接的步骤,所有我们可以利用这一点,在JDBCUtils中加以利用,这样就有了
利用连接池,改写JDBCUtils类,使JDBCUtils更加强大;
---->为了简化对结果集ResultSet的数据封装,出现了DBUtils,它直接对Connection /或者DataSource 操作;
DBUtils核心类QueryRunner,用于sql操作,ResultSetHandler(结果集处理器)用于对数据进行封装;
3.Transaction: 模板代码:
管理事务:
setAutoCommit(boolean autoCommit)
commit()
rollback()
try {
File file = new File("accountConfig.properties");
// 注册驱动
JDBCUtils.loadDriver(file);
// 创建连接
conn = JDBCUtils.getConnection();
//开启事务
conn.setAutoCommit(false);
//事务具体的内容:
String sql = "update account set money =money+ ? where name = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "100");
pstmt.setString(2, "xiaozhang");
pstmt.executeUpdate();
//----------------------
pstmt.setString(1, "-100");
pstmt.setString(2, "xiaowang");
pstmt.executeUpdate();
提交事务:
conn.commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
try {
//回滚事务
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}finally{
JDBCUtils.release(rs, pstmt, conn);
}
老师总结:
3. jdbc去管理事务: -- 很重要 , 要能够理解, 并且写出来.
jdbc的模版代码是怎样写的?
public void test1(){
Connection conn = null;
try{
conn = JdbcUtils.getConnection();
//开启事务 start transaction
conn.setAutoCommit(false);
// 干你 想干的事儿...
....
...
//走到这里, 正常的执行, 那么就要确认你的 事务操作,
// 提交 , commit
conn.commit();
}catch(Exception e){
e.printStackTrace();
//回滚事务
// rollback
conn.rollback();
}finally{
JdbcUitls.release(...);
}
}
注意: 1. 管理事务的时候,必须要确保从头 到尾都是使用的 同一个
connection对象
2.由于管理事务的要求非常的严格,所以 在捕获异常的时候,通常
都是 捕获 最大的异常, Exception
---->六步实现java程序对数据库的操作
---->为了简化六步,出现JDBCUtils
---->为了提高并发访问效率,出现连接池Druid/c3p0,可以直接从连接池获得Connection,
并且这个时候对Connection的进行了装饰,返回的Connection自带连接池引用,
close()方法自动归还连接到连接池,
----->由于连接池技术的出现,它本身也封装了创建连接的步骤,所有我们可以利用这一点,在JDBCUtils中加以利用,这样就有了
利用连接池,改写JDBCUtils类,使JDBCUtils更加强大;
---->为了简化对结果集ResultSet的数据封装,出现了DBUtils,它直接对Connection /或者DataSource 操作;
DBUtils核心类QueryRunner,用于sql操作,ResultSetHandler(结果集处理器)用于对数据进行封装;
3.Transaction: 模板代码:
管理事务:
setAutoCommit(boolean autoCommit)
commit()
rollback()
try {
File file = new File("accountConfig.properties");
// 注册驱动
JDBCUtils.loadDriver(file);
// 创建连接
conn = JDBCUtils.getConnection();
//开启事务
conn.setAutoCommit(false);
//事务具体的内容:
String sql = "update account set money =money+ ? where name = ? ";
pstmt = conn.prepareStatement(sql);
pstmt.setString(1, "100");
pstmt.setString(2, "xiaozhang");
pstmt.executeUpdate();
//----------------------
pstmt.setString(1, "-100");
pstmt.setString(2, "xiaowang");
pstmt.executeUpdate();
提交事务:
conn.commit();
} catch (Exception e) {
// TODO: handle exception
e.printStackTrace();
try {
//回滚事务
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
}finally{
JDBCUtils.release(rs, pstmt, conn);
}
老师总结:
3. jdbc去管理事务: -- 很重要 , 要能够理解, 并且写出来.
jdbc的模版代码是怎样写的?
public void test1(){
Connection conn = null;
try{
conn = JdbcUtils.getConnection();
//开启事务 start transaction
conn.setAutoCommit(false);
// 干你 想干的事儿...
....
...
//走到这里, 正常的执行, 那么就要确认你的 事务操作,
// 提交 , commit
conn.commit();
}catch(Exception e){
e.printStackTrace();
//回滚事务
// rollback
conn.rollback();
}finally{
JdbcUitls.release(...);
}
}
注意: 1. 管理事务的时候,必须要确保从头 到尾都是使用的 同一个
connection对象
2.由于管理事务的要求非常的严格,所以 在捕获异常的时候,通常
都是 捕获 最大的异常, Exception