12.1用于JDK6,JDK7,低于JDK6的都不被支持
12.1的jdbc驱动也支持oracle11.x,低于11的都不被支持
Jdk6以后,不再需要Class.forName("oracle.jdbc.OracleDriver") 这句话
标准Jdbc驱动中executeQuery没有结果集返回时会有SqlException,
Oracle实现不会抛异常
同时关闭statement和resultset后,相应的游标才会关闭
如果是DDL,如建表,只能用statement
如果用preparedstatement,第一次可以运行,以后都会失败
conn.setAutoCommit(false);
如果自动提交取消,但关闭了连接,则会自动提交所有
对于DDL总是会自动提交,DML中执行完DDL会自动提交所有
批更新只能是增,删,改,如果是返回结果集的语句会报错
使用之前要关闭自动提交
批更新主要用于preparedstatement,因为已经预编译了,性能很高
用statement也行,但没有任何优势
Statement stmt = conn.createStatement(); stmt.addBatch("INSERT INTO emp VALUES(1000, 'Joe Jones')"); stmt.addBatch("INSERT INTO dept VALUES(260, 'Sales')"); stmt.addBatch("INSERT INTO emp_dept VALUES(1000, 260)");
PreparedStatement pstmt = conn.prepareStatement("INSERT INTO employees VALUES(?, ?)"); pstmt.setInt(1, 2000); pstmt.setString(2, "Milo Mumford"); pstmt.addBatch(); pstmt.setInt(1, 3000); pstmt.setString(2, "Sulu Simpson"); pstmt.addBatch(); int[] updateCounts = pstmt.executeBatch()
如果一共有5条
成功会返回5个记录的数组,第4条失败,会抛出 BatchUpdateException 异常
BatchUpdateException.getUpdateCounts 包含了3个记录的数组
这时候即时成功的也可以rollback
在处理过程中出现了commit,则会提交已经处理了的那些
在处理过程中出现了rollback,并不会清空整个statement,要手动clearBatch
一旦addBatch了,或者excuteBatch,或者clearBatch,否则报错
excuteBatch,或者clearBatch都会清空整个statement
clearBatch没有返回值
executeBatch之前不能调用其他的executeXX
但他们可以使用同一个statement
默认,查询到的结果集是10行10行的处理的
setFetchSize 设置新值后会影响这个statement上之后的语句
结果集中也可以设置,将会覆盖statement传来的
ResultSet.refreshRow并不会真实刷新底层数据,即时已经被删除了仍会保留当前值