1、JDBC取得数据库自动生成的主键
获取自增长的键值:
(1)在创建PreparedStatement对象时
原来:
PreparedStatementpst=conn.preparedStatement(sql);
现在:
PreparedStatementpst=conn.prepareStatement(orderInsert,Statement.RETURN_GENERATED_KEYS);
(2)原来执行更新
原来:
intlen=pst.executeUpdate();
现在:
intlen=pst.executeUpdate();
ResultSetrs=pst.getGeneratedKeys();
if(rs.next()){
Objectkey=rs.getObject(第几列);//获取自增长的键值
}
2、批处理
当需要成批插入或者更新记录时。可以采用Java的批量更新机制,这一机制允许多条语句一次性提交给数据库批量处理。通常情况下比单独提交处理更有效率。
JDBC的批量处理语句包括下面两个方法:
addBatch():添加需要批量处理的SQL语句或参数
executeBatch():执行批量处理语句;
通常我们会遇到两种批量执行SQL语句的情况:
多条SQL语句的批量处理;
一个SQL语句的批量传参;
注意:
JDBC连接MySQL时,如果要使用批处理功能,请再url中加参数?rewriteBatchedStatements=true
PreparedStatement作批处理插入时使用values(使用value没有效果)
2.1Statement
voidaddBatch(Stringsql):添加需要批量处理的SQL语句
int[]executeBatch();执行批量处理语句;
2.2PreparedStatement
voidaddBatch()将一组参数添加到此PreparedStatement对象的批处理命令中
int[]executeBatch();执行批量处理语句;
2.3关于效率测试
测试:插入条记录
(1)Statement不使用批处理
(2)PreparedStatement不使用批处理
(3)Statement使用批处理
(4)PreparedStatement使用批处理(效率最高)
(4)(3)(1)(2)
2.4示例代码
3、事务
JDBC程序中当一个连接对象被创建时,默认情况下是自动提交事务:每次执行一个SQL语句时,如果执行成功,就会向数据库自动提交,而不能回滚。
JDBC程序中为了让多个SQL语句作为一个事务执行:(重点)
调用Connection对象的setAutoCommit(false);以取消自动提交事务
在所有的SQL语句都成功执行后,调用