try {
DBUtil.beginTranaction();
dao.Add(emp);
DBUtil.commit();
} catch (Exception e) {
e.printStackTrace();
try {
DBUtil.rollback();
} catch (SQLException e1) {
e1.printStackTrace();
}
System.out.println("系统繁忙,请稍后再试");
}开始事务的代码:public static void beginTranaction() throws SQLException{
try {
Connection conn = getConnection();
System.out.println("到底运行到这里没有");
conn.setAutoCommit(false);
System.out.println("到底运行到这里没有false");
} catch (SQLException e) {
e.printStackTrace();
System.out.println("启动事务失败");
throw e;
}
}
add方法的代码: public void Add(Employee e) throws SQLException  {
Connection conn=null;
PreparedStatement prep=null;
try{
conn=DBUtil.getConnection();
String sqlAdd="insert into t_emp(name,salary,age) values(?,?,?)";
prep=conn.prepareStatement(sqlAdd);
prep.setString(1,e.getName());
prep.setDouble(2,e.getSalary());
prep.setInt(3,e.getAge());
int row=prep.executeUpdate();
//System.out.println(row);
}catch(SQLException ex){
ex.printStackTrace();
throw ex;
}finally{
if(prep!=null){
prep.close();
}
DBUtil.close();
System.out.println("add的整个连接已经关闭提交了为什么还没有插入进去");
}
}我知道出错了,将add方法里面的DBUtil.close()去掉就能正常插入数据,但是我觉得不去的话也可以插入数据呀?异常是报的后面一句  ,DBUtil.commit();
为什么啊    求各位大神

解决方案 »

  1.   

    我崩溃。你把
     DBUtil这个对象关闭掉了。。
    这个对象就等同于没用的可以被垃圾回收机制给清掉的。。
    然后你又想调用 DBUtil去执行 commit();操作,可能么
      

  2.   

     }finally{
            if(prep!=null){
                prep.close();
            }
            DBUtil.close();
            System.out.println("add的整个连接已经关闭提交了为什么还没有插入进去");
        }
    这两行的确没出错,你将DBUtil.close();这边执行完了,那到了下一步的
    DBUtil.commit();自然就出错了
      

  3.   

    是要prep.commit()   不是 DBUtil.commit
      

  4.   

    嗯 我知道呀··但是数据应该被放进数据库了不?没有插进去。  你可以到PS SQL 试试 写个  插入语句, 执行了 但不提交,再把数据库关了  然后 在打开数据库  你会发现你的数据没有插进去 !
      

  5.   


    一般默认关闭的时候都会提交,但是也不一定。
    我从来没用过 DBUtil,这个我猜是你们自己写的或者是额外的jar包里面的吧。
    一般执行close方法里面都会有commit语句,所以才会提交,而如果你的close方法里面没有commit语句的话,自然不会提交了。。另外我看你还添加了异常处理,异常处理中添加了那是滚回的方法吧。DBUtil.rollback();
    也就是说出异常的话数据是不是就回滚了?
      

  6.   

    嗯 我知道呀··但是数据应该被放进数据库了不?没有插进去。  你可以到PS SQL 试试 写个  插入语句, 执行了 但不提交,再把数据库关了  然后 在打开数据库  你会发现你的数据没有插进去 !嗯 谢谢 受教了
      

  7.   


    一般默认关闭的时候都会提交,但是也不一定。
    我从来没用过 DBUtil,这个我猜是你们自己写的或者是额外的jar包里面的吧。
    一般执行close方法里面都会有commit语句,所以才会提交,而如果你的close方法里面没有commit语句的话,自然不会提交了。。另外我看你还添加了异常处理,异常处理中添加了那是滚回的方法吧。DBUtil.rollback();
    也就是说出异常的话数据是不是就回滚了?对啊  好像是这样的···大哥 小弟读书浪费了四年光阴,现在在培训机构··一片迷茫···学的是java web 求指教啊···
      

  8.   


    一般默认关闭的时候都会提交,但是也不一定。
    我从来没用过 DBUtil,这个我猜是你们自己写的或者是额外的jar包里面的吧。
    一般执行close方法里面都会有commit语句,所以才会提交,而如果你的close方法里面没有commit语句的话,自然不会提交了。。另外我看你还添加了异常处理,异常处理中添加了那是滚回的方法吧。DBUtil.rollback();
    也就是说出异常的话数据是不是就回滚了?对啊  好像是这样的···大哥 小弟读书浪费了四年光阴,现在在培训机构··一片迷茫···学的是java web 求指教啊···
    我其实和你一样,浪费了三年,最后一年才发愤图强开始学习的。。
    有空看看我的经历吧,
    http://blog.csdn.net/rzleilei/article/details/12689999