对比Statement和PreparedStatement
对比Statement和PreparedStatement
1.Statement 存在sql注入问题,PreparedStatement解决了sql注入问题。
2.Statement是编译一次,执行一次,PreparedStatement是编译一次,执行N次,PreparedStatement效率较高一点。
3.PreparedStatement会在编译结点做类型的安全检查。
综上所述,PreparedStatement使用较多,只有极少数的情况下需要使用Statement
在业务方面要求必须支持SQL的时候,才会使用到Statement
JDBC事务机制:
1.JDBC的事务是自动提交的,什么是自动提交?
只要执行任意的一条DML语句,通常都只 N条DML语句共同联合才能完成的,必须保证他们这些DML语句在同一个事务中同时成功或者同时失败。
2.JDBC中只要执行任意一条DML语句,就提交一次。
将JDBC的自动提交关闭,改为手动开启事务。
conn.setAutoCommit(false);
提交事务
conn.commit();
回滚事务
if(conn!=null){
try{
conn.rollback();
}catch(SQLException e){
e.printStackTrace();
}
}
3.乐观锁和悲观锁
其中事务 1先修改了,修改之后看了版本号是1.1,遇事提交修改的数据,将版本号修改为1.2。
其中事务2后修改的,修改之后准备提交的时候,发现版本号是1.2,和他最初读取的版本号不一致,回滚。
悲观锁:事务必须排队执行,数据锁住了,不允许并发
乐观锁:支持并发