最近新学了“事务”,在Java里写了一个小练习,想达到根据执行结果输出不同语句(任务顺利提交输出“success”,任务执行失败输出“rollback)的目的。这是main方法里的全部代码:String message=""; //要打印输出的语句
Connection conn=null;
Statement stm=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
stm=conn.createStatement();
conn.setAutoCommit(false); //声明事务
stm.executeUpdate("update emp set sal=sal-500 where ename='SMITH'");
stm.executeUpdate("update emp set sal=sal+aaa where ename='SCOTT'"); //此处故意抛出异常以测试回滚操作
conn.commit(); //事务提交
message="success!";
} catch (Exception e) {
try {
conn.rollback(); //事务回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
message="rollback!";
} finally { //关闭一切数据库链接资源
try {
stm.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.print(message); //输出结果 可是执行之后却没有任何输出。我另外写了一个查询方法,套用同样的连库语句,是能够查出数据的,说明数据库是连接成功的。可是为什么看不到任何输出语句呢?
Connection conn=null;
Statement stm=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
stm=conn.createStatement();
conn.setAutoCommit(false); //声明事务
stm.executeUpdate("update emp set sal=sal-500 where ename='SMITH'");
stm.executeUpdate("update emp set sal=sal+aaa where ename='SCOTT'"); //此处故意抛出异常以测试回滚操作
conn.commit(); //事务提交
message="success!";
} catch (Exception e) {
try {
conn.rollback(); //事务回滚
} catch (SQLException e1) {
e1.printStackTrace();
}
message="rollback!";
} finally { //关闭一切数据库链接资源
try {
stm.close();
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
System.out.print(message); //输出结果 可是执行之后却没有任何输出。我另外写了一个查询方法,套用同样的连库语句,是能够查出数据的,说明数据库是连接成功的。可是为什么看不到任何输出语句呢?
你把System.out.print(message); 放到try{}里面的最后一句,在捕获异常时输出System.out.print("rollback");
String message=""; //要打印输出的语句
Connection conn=null;
Statement stm=null;
try {
Class.forName("oracle.jdbc.driver.OracleDriver");
conn=DriverManager.getConnection("jdbc:oracle:thin:@localhost:1521:ORCL","scott","tiger");
stm=conn.createStatement();
conn.setAutoCommit(false); //声明事务
stm.executeUpdate("update emp set sal=sal-500 where ename='SMITH'");
stm.executeUpdate("update emp set sal=sal+aaa where ename='SCOTT'"); //此处故意抛出异常以测试回滚操作
conn.commit(); //事务提交
message="success!";
System.out.print(message); //输出结果
} catch (Exception e) {
try {
conn.rollback(); //事务回滚
System.out.print("rollback");
} catch (SQLException e1) {
e1.printStackTrace();
}
message="rollback!";
} finally { //关闭一切数据库链接资源
try {
stm.close();
conn.close();
System.out.print("closed!");
} catch (SQLException e) {
e.printStackTrace();
}
}