JDBC - PreparedStatement executeUpdate() 返回 0
Posted
技术标签:
【中文标题】JDBC - PreparedStatement executeUpdate() 返回 0【英文标题】:JDBC - PreparedStatement executeUpdate() returning 0 【发布时间】:2017-08-25 08:26:50 【问题描述】:try
Connection conn = getConnection();
String strUpdateQuery = "update payment_table set CREDIT_CARD_NO = ? where PAYMENT_KEY= ?";
PreparedStatement ps =conn.prepareStatement(strUpdateQuery);
for(int i=0;i<nodes.getLength();i++)
ps.setString(1,"524364OQNBQQ4291");
ps.setString(2,"20130215123757533280168");
ps.executeUpdate();
conn.commit();
catch(SQLException e)
e.printStackTrace();
即使我检查了主键是否正确,也不会更新一行。
【问题讨论】:
您是否缺少 beginTransaction ? 另外,为什么是循环? 你想用你的标题表达什么?这似乎与您的实际问题无关。 请出示getConnection
的代码、您的DDL和示例数据以重现此内容。还要指定您正在使用的数据库。
@ScaryWombat 事务在必要时在 JDBC 中隐式启动(例如,当执行语句并且没有事务处于活动状态时),并且鉴于他正在调用 commit()
,我们可以假设禁用自动提交(否则调用 commit 应该抛出异常)
【参考方案1】:
尝试批量更新:
void batchUpdate()
String strUpdateQuery = "UPDATE payment_table " +
"SET CREDIT_CARD_NO = ? " +
"WHERE PAYMENT_KEY= ?";
try (Connection conn = getConnection();
PreparedStatement ps = conn.prepareStatement(strUpdateQuery))
for (int i = 0; i < nodes.getLength(); i++)
ps.setString(1, "524364OQNBQQ4291");
ps.setString(2, "20130215123757533280168");
ps.addBatch();
int[] updated = ps.executeBatch();
// can log updated rows from "updated"
// conn.commit(); in case autocommit set to false or used conn.setAutoCommit(false) somewhere
catch (SQLException e)
e.printStackTrace();
【讨论】:
是的,我也尝试过批量更新。但也没有错误,没有运气。是的,我在我的代码中使用了 conn.setAutoCommit(false)。 此建议与所描述的问题并不真正相关。以上是关于JDBC - PreparedStatement executeUpdate() 返回 0的主要内容,如果未能解决你的问题,请参考以下文章
JDBC - 语句、PreparedStatement、CallableStatement 和缓存
JDBC封装学习笔记---面向对象的JDBC,使用preparedStatement
JDBC深入理解Statement和PreparedStatement