PreparedStatement 以及事务的注意事项
Posted chq1024
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了PreparedStatement 以及事务的注意事项相关的知识,希望对你有一定的参考价值。
a).PreparedStatement 可以进行批量操作,但是与Statement有一定的区别
1. Statement可以进行不同sql语句的批量操作
即可以同时进行 crud 操作.
String sql1=xxx;
String sql2=xxx;
String sql3=xxx;
Statement statement=conn.createStatement();
statement.addBatch(sql1) ;
statement.addBatch(sql2);
statement.addBatch(sql3);
statement.executeQuery(sql)
or
statement.executeUpdate(sql)
2. PreparedStatement 不能执行不同的sql语句, 只能执行一条类型的sql语句,但是可以参数不同
String sql="insert into table values(?,?,?,?,?)";
PreparedStatement pstm=conn.preparedStatement (sql);
pstm.setString(1,xx);
pstm.setString(2,xx);
pstm.setString(3,xx);
pstm.setString(4,xx);
pstm.addBatch();
pstm.setString(1,xx);
pstm.setString(2,xx);
pstm.setString(3,xx);
pstm.setString(4,xx);
pstm.addBatch();
pstm.executeQuery();
or
pstm.executeUpate();
b) 注意这些批量操作,应该使用开启事务
开启事务:
1.需要去看数据库是否支持事务,更换引擎为InnodDB
2.有些版本的navicat有一个开启事务的按钮
3.在Dao层中,可以使用conn.setAutoCommit(false) 默认为true,这里设置为false,可以阻止自动提交
//在进行完操作后,应该手动提交
conn.commit();
//如果出错, 需要回滚事务,那么我们可以在catch中进行事务的回滚操作
//首先判断conn是否关闭了
if(!conn.isClosed)
{
//没有关闭进行回滚
conn.rollback();
//随你...
conn.setAutoCommit(true);
}
以上是关于PreparedStatement 以及事务的注意事项的主要内容,如果未能解决你的问题,请参考以下文章
JDBC preparedStatement分页和统计,批处理和事务
将 PreparedStatement 批处理与 Statement 批处理混合,可以吗?