今天想巩固一下JDBC方面的基本知识.当看到事物的时候,使用纯JDBC代码进行控制。遇到这么一个问题:conn.setAutoCommit(false);并使用conn.createStatement()得到Statement后执行更新操作,若不手动执行conn.commit();那么当执行conn.close();的时候,数据会执行更新。也就是说不是真正的手动控制。如果通过conn.prepareStatement(sql)得到PrepareStatement就必须要进行conn.commit()才能真正执行提交操作。我认为后者是正常的。
这些必然是各个数据库驱动自己的实现导致,其他数据库我还没有测试,目前使用的是Oracle 10g.我想知道:
这个问题困扰我一下午了,我真的非常想知道是怎么个回事。如果您知道从哪可以查看到这些资料,贴上连接也行。非常感谢!下面是我的代码:
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 }