java异常与事务,事务异常 - Java Exception

事务异常:

代码如下:

try {

con = BankSqlConnect.getconn();

con.setAutoCommit(false);

stmt = con.createStatement();

String sql = " ";

ResultSet rs;

days = getDays(accountid);

sql = "update account set last_time=getdate() "

+ "where account_num= " + accountid;

stmt.executeUpdate(sql);

mey = mey + balance;

mey = (float) (mey + mey * days * 0.003);

sql = "update account set balance = " + mey

+ "where account_num= " + accountid;

stmt.executeUpdate(sql);

result = "今天是: " + GetTime.getLongDate() + "已经成功存 " + mey

+ "钱,谢谢光临! ";

sql = "insert into message(account_num,message_context,message_time,message_class) values( ' "

+ accountid

+ " ', ' "

+ result

+ " ', ' "

+ GetTime.getLongDate() + " ',1) ";

stmt.executeUpdate(sql);

sql = "select customer_id from depositor where account_num= "

+ accountid;

rs = stmt.executeQuery(sql);

String a = " ";// 找出客户的ID

while (rs.next()) {

a = rs.getString( "customer_id ");

}

// 稍微加点信用值

sql = "update customer set customer_lever=customer_lever+ " + lv

+ " where customer_id like '% " + a + "% ' ";

stmt.executeUpdate(sql);

con.commit();

con.setAutoCommit(true);

return 1;

}

catch (Exception exp) {

exp.printStackTrace();

try{

if(con!=null)

{

con.rollback();

con.setAutoCommit(true);

}

}catch(SQLException ex){

ex.printStackTrace();

}

}finally{

try{

if(stmt!=null) stmt.close();

if(con!=null) con.close();

}catch(SQLException e2){

e2.printStackTrace();

}

}

代码在上:

错误提示:java.sql.SQLException: rollback() should not be called while in auto-commit mode.

at net.sourceforge.jtds.jdbc.ConnectionJDBC2.rollback(ConnectionJDBC2.java:1893)

数据库是sql server 2000的

------解决方法--------------------------------------------------------

con.setAutoCommit(false);

改为

con.setAutoCommit(true);

------解决方法--------------------------------------------------------

这个异常应该不是抛出的第一个异常吧,你前面捕获异常的时候已经回滚了一次,设置autoCommit为ture了,第2次回滚的时候是AutoCommit模式,当然就抛异常了啊

------解决方法--------------------------------------------------------

con.commit();

con.setAutoCommit(true); //不要,去掉这句

con.rollback();

con.setAutoCommit(true);//不要,去掉这句

正确的格式是这样的

con.setAutoCommit(false);

try{

execute(sql1);

execute(sql);

con.commit();

}catch(Exception e){

con.rollback();

}

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值