【发布时间】:2012-07-10 15:20:58
【问题描述】:
在 SQL 数据库上使用多个连续的 executeUpdate() 方法有多安全?
考虑 2 个语句:
st.executeUpdate("INSERT table SELECT col1,col2 FROM table WHERE ID=" +var_id);
st.executeUpdate("DELETE FROM table WHERE ID=" +var_id);
他们的行为如何?第二条语句是等待第一条语句的完成,还是我们应该检查返回值(受影响的行数)并根据第二条语句采取相应的行动?
【问题讨论】:
-
取决于您的连接是否设置为自动提交。您使用的是什么 JDBC 驱动程序?
-
我想这取决于方法是否是异步的。如果它返回一个代码(例如,一个直整数,如 100 - '未找到行'),则表示它已完成。 始终检查此类代码。此外,您目前对 SQL 注入持开放态度;使用准备好的语句。
-
如果你的连接开启了自动提交,它将提交每一个事务,上面的操作是绝对安全的。即使您没有启用自动提交,它也应该是安全的,但您需要记住手动提交或回滚。如果您希望在第二条语句失败的情况下回滚第一条语句,那么您需要关闭自动提交。大多数 JDBC 驱动程序默认自动提交(至少我认为 JTDS 会这样做)。
标签: java sql sql-server tsql sql-update