Discuss / Java / 为啥代码里不需要catch SQL异常?

为啥代码里不需要catch SQL异常?

Topic source

asdas2333

#1 Created at ... [Delete] [Delete and Lock User]

不是在抛出SQL异常后必须捕获并调用conn.rollback()回滚事务吗?为什么代码了完全没有捕获?

asdas2333

#2 Created at ... [Delete] [Delete and Lock User]

int n = ps.executeUpdate();

这句不是有可能抛出异常吗?为什么我们不需要额外写个try-catch?

asdas2333

#3 Created at ... [Delete] [Delete and Lock User]

是因为现在只执行一句,一句statement本身就是atomic?

廖雪峰

#4 Created at ... [Delete] [Delete and Lock User]
Connection conn = openConnection();
try {
    // 关闭自动提交:
    conn.setAutoCommit(false);
    // 执行多条SQL语句:
    insert(); update(); delete();
    // 提交事务:
    conn.commit();
} catch (SQLException e) {
    // 回滚事务:
    conn.rollback();
} finally {
    conn.setAutoCommit(true);
    conn.close();
}

qyusd

#5 Created at ... [Delete] [Delete and Lock User]

ps.executeUpdate();  这个报错就报错呗,单条语句肯定是原子性的。 如果好几个语句需要业务原子性,需要trycatch进行捕获回滚。

🌙

#6 Created at ... [Delete] [Delete and Lock User]

你没搞明白事务吧?一个操作不成功,也不会改变数据数据库啊,要什么回滚啊,

回滚,是多个操作进行关联,有的成功有的没有成功,需要对已经成功的进行回滚

🌙

#7 Created at ... [Delete] [Delete and Lock User]

之前的想法错了,catch 

SQLException

是非正常情况,

conn.commit();

的时候出了问题

好像也不对啊,commit 都出问题了 肯定不会提交啊 数据也不会变,照理来说,也就不用rollback啊

越想越觉得有问题,再去查下资料

🌙

#8 Created at ... [Delete] [Delete and Lock User]

Joker.fu_95

#9 Created at ... [Delete] [Delete and Lock User]

楼上不懂就多看,别搁这儿瞎猜测,浪费屏幕空间,影响别人浏览


  • 1

Reply