您的位置:首页 > 其它

JDBC事务保存点,即事部分回滚

2014-03-25 19:30 218 查看

转载/article/3972188.html

JDBC事务保存点,即事部分回滚

JDBCSQLJava

JDBC中的事务保存点,即事务发生回滚的时候,回滚到保存点那里去,事务开始到保存点之间的操作不用回滚.

事务(SavePoint)

l 当只想撤销事务中的部分操作时可使用SavePoint

l SavePoint sp = connection.setSavepoint();

l connection.rollerbak(sp); //回滚到那个事务点上去

l connection.commit();

import java.sql.Connection;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Savepoint;

import java.sql.Statement;

publicclass SavePointTest {

publicstaticvoid
main(String[] args) throws SQLException {

test();

}

staticvoid test()
throws SQLException {

Connection conn =
null
;

Statement st =
null
;

ResultSet rs =
null
;

Savepoint sp =
null
;

try {

conn = JdbcUtils.getConnection();

conn.setAutoCommit(false);

st = conn.createStatement();

String sql =
"update user set money=money-10 where id=1";

st.executeUpdate(sql);

sp = conn.setSavepoint();

sql =
"update user set money=money-10 where id=3";

st.executeUpdate(sql);

sql =
"select money from user where id=2";

rs = st.executeQuery(sql);

float money = 0.0f;

if (rs.next()) {

money = rs.getFloat("money");

}

if (money > 300)

thrownew RuntimeException("已经超过最大值!");

sql =
"update user set money=money+10 where id=2";

st.executeUpdate(sql);

conn.commit();

} catch (RuntimeException e) {

if (conn !=
null && sp !=
null) {

conn.rollback(sp);//回滚到那个事务点上去

conn.commit();

}

throw e;

} catch (SQLException e) {

if (conn !=
null)

conn.rollback();

throw e;

} finally {

JdbcUtils.free(rs, st, conn);

}

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: