日期:2014-05-20  浏览次数:20811 次

设置了setautocommit为false,最后直接关闭连接,会提交不
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();
为什么啊    求各位大神

------解决方案--------------------
引用:
Quote: 引用:

 }finally{
        if(prep!=null){
            prep.close();
        }
        DBUtil.close();
        System.out.println("add的整个连接已经关闭提交了为什么还没有插入进去");
    }

这两行的确没出错,你将DBUtil.close();这边执行完了,那到了下一步的
DBUtil.commit();自然就出错了
嗯 我知道呀··但是数据应该被放进数据库了不?
没有插进去。  你可以到PS SQL 试试 写个  插入语句, 执行了 但不提交,再把数据库关了  然后 在打开数据库  你会发现你的数据没有插进去 !
------解决方案--------------------
引用:
Quote: 引用:

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


引用:
我崩溃。你把
 DBUtil这个对象关闭掉了。。
这个对象就等同于没用的可以被垃圾回收机制给清掉的。。
然后你又想调用 DBUtil去执行 commit();操作,可能么。。。
大神,我关闭掉了 连接会不会自动提交?·我知道后面错了··


你都不提交,怎么可能会插入到数据库呢?之前的只不过的是准备插入了而已。
------解决方案--------------------
引用:
Quote: 引用:

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


引用:
我崩溃。你把
 DBUtil这个对象关闭掉了。。
这个对象就等同于没用的可以被垃圾回收机制给清掉的。。
然后你又想调用 DBUtil去执行 commit();操作,可能么。。。
大神,我关闭掉了 连接会不会自动提交?·我知道后面错了··

一般默认关闭的时候都会提交,但是也不一定。
我从来没用过 DBUtil,这个我猜是你们自己写的或者是额外的jar包里面的吧。
一般执行close方法里面都会有commit语句,所以才会提交,而如果你的close方法里面没有commit语句的话,自然不会提交了。。

另外我看你还添加了异常处理,异常处理中添加了那是滚回的方法吧。DBUtil.rollback();
也就是说出异常的话数据是不是就回滚了?