系统是用java写的,我写程序时忘了写 conx.commit(),但执行时没有报错,并且数据还是被删除了,这是怎么回事?Connection conx=cons.Connect();
Statement stmt=conx.createStatement();
conx.setAutoCommit(false);
stmt.executeUpdate(strSql1);
stmt.executeUpdate(strSql2);
stmt.executeUpdate(strSql3);
stmt.executeUpdate(strSql4);
stmt.executeUpdate(strSql5);
stmt.executeUpdate(strSql6);
stmt.executeUpdate(strSql7);
stmt.executeUpdate(strSql);
stmt.close();
conx.setAutoCommit(true);
conx.close();
Statement stmt=conx.createStatement();
conx.setAutoCommit(false);
stmt.executeUpdate(strSql1);
stmt.executeUpdate(strSql2);
stmt.executeUpdate(strSql3);
stmt.executeUpdate(strSql4);
stmt.executeUpdate(strSql5);
stmt.executeUpdate(strSql6);
stmt.executeUpdate(strSql7);
stmt.executeUpdate(strSql);
stmt.close();
conx.setAutoCommit(true);
conx.close();
conx.close();这两句都会执行COMMITconx.close 正常关闭会话,也是隐式的commit
Connection conx=cons.Connect();
Statement stmt=conx.createStatement();
conx.setAutoCommit(false);
stmt.executeUpdate(strSql1);
stmt.executeUpdate(strSql2);
stmt.executeUpdate(strSql3);
stmt.executeUpdate(strSql4);
stmt.executeUpdate(strSql5);
stmt.executeUpdate(strSql6);
stmt.executeUpdate(strSql7);
stmt.executeUpdate(strSql);
stmt.close();
conx.setAutoCommit(true);
conx.close();
貌似用PreparedStatement安全性上好一点,LZ用的是mysql数据库么,这样写是为了保持事务一致?
edb_stmt_level_tx的值
参考:
http://www.enterprisedb.com/docs/en/8.3R2/oracompat/EnterpriseDB_OraCompat_8.3-04.htm#P79_7676