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();
为什么啊 求各位大神
------解决方案--------------------
没有插进去。 你可以到PS SQL 试试 写个 插入语句, 执行了 但不提交,再把数据库关了 然后 在打开数据库 你会发现你的数据没有插进去 !
------解决方案--------------------
我崩溃。你把
DBUtil这个对象关闭掉了。。
这个对象就等同于没用的可以被垃圾回收机制给清掉的。。
然后你又想调用 DBUtil去执行 commit();操作,可能么。。。大神,我关闭掉了 连接会不会自动提交?·我知道后面错了·· 我崩溃。你把
DBUtil这个对象关闭掉了。。
这个对象就等同于没用的可以被垃圾回收机制给清掉的。。
然后你又想调用 DBUtil去执行 commit();操作,可能么。。。
你都不提交,怎么可能会插入到数据库呢?之前的只不过的是准备插入了而已。
------解决方案--------------------
我崩溃。你把
DBUtil这个对象关闭掉了。。
这个对象就等同于没用的可以被垃圾回收机制给清掉的。。
然后你又想调用 DBUtil去执行 commit();操作,可能么。。。大神,我关闭掉了 连接会不会自动提交?·我知道后面错了·· 我崩溃。你把
DBUtil这个对象关闭掉了。。
这个对象就等同于没用的可以被垃圾回收机制给清掉的。。
然后你又想调用 DBUtil去执行 commit();操作,可能么。。。
一般默认关闭的时候都会提交,但是也不一定。
我从来没用过 DBUtil,这个我猜是你们自己写的或者是额外的jar包里面的吧。
一般执行close方法里面都会有commit语句,所以才会提交,而如果你的close方法里面没有commit语句的话,自然不会提交了。。
另外我看你还添加了异常处理,异常处理中添加了那是滚回的方法吧。DBUtil.rollback();
也就是说出异常的话数据是不是就回滚了?