首页 新闻 会员 周边 捐助

JDBC 非自动提交,不执行conn.commit但在conn.close时会自动提交?

0
悬赏园豆:20 [待解决问题]

     今天想巩固一下JDBC方面的基本知识.当看到事物的时候,使用纯JDBC代码进行控制。遇到这么一个问题:conn.setAutoCommit(false);并使用conn.createStatement()得到Statement后执行更新操作,若不手动执行conn.commit();那么当执行conn.close();的时候,数据会执行更新。也就是说不是真正的手动控制。如果通过conn.prepareStatement(sql)得到PrepareStatement就必须要进行conn.commit()才能真正执行提交操作。我认为后者是正常的。

      这些必然是各个数据库驱动自己的实现导致,其他数据库我还没有测试,目前使用的是Oracle 10g.我想知道:

  1. 仅对于Oracle的驱动来说有什么规范说明吗?我在官方没有找到。
  2. 我使用的是ojdbc6.jar conn.close();的代码我看了,没找到什么有用的地方。如果您知道可以告诉我。

      这个问题困扰我一下午了,我真的非常想知道是怎么个回事。如果您知道从哪可以查看到这些资料,贴上连接也行。非常感谢!下面是我的代码:

  

 

 1      Connection conn = null;
 2         Statement statement = null;
 3         try {
 4             Class.forName("oracle.jdbc.OracleDriver");
 5             conn = DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:orcl", "test", "test");
 6             conn.setAutoCommit(false);
 7              statement = conn.createStatement();
 8              int count = statement.executeUpdate("insert into TEST values(sys_guid(),'Conn Auto Commit')");
 9              System.out.println(count);
10         } catch (SQLException e) {
11             conn.rollback();
12             e.printStackTrace();
13         } catch (ClassNotFoundException e) {
14             e.printStackTrace();
15         } finally {
16             try {
17                 conn.close();
18             } catch (SQLException e) {
19                 e.printStackTrace();
20             }
21         }
天书说的主页 天书说 | 初学一级 | 园豆:182
提问于:2013-12-08 00:56
< >
分享
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册