最近新学了“事务”,在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);          //输出结果    可是执行之后却没有任何输出。我另外写了一个查询方法,套用同样的连库语句,是能够查出数据的,说明数据库是连接成功的。可是为什么看不到任何输出语句呢?

解决方案 »

  1.   

    没有回退语句,加上试试。另外可以在catch中加入打印语句,看看是否有进入到catch块。最好是debug一下。
      

  2.   

    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();
        }
    }