`

Oracle_12.1_JDBC开发者指南_2013.7(1)

 
阅读更多

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并不会真实刷新底层数据,即时已经被删除了仍会保留当前值

 

 

 

 

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics