我一直在从 PostgreSQL 9.1 迁移到 Oracle 11gR2 并且遇到了一个奇怪的问题。
当客户添加到我们的 ERP 系统时,我一直在运行更新表格的代码。自 3 月以来,此代码一直在 PostgreSQL 上运行,没有出现任何问题。现在我切换到 Oracle,相同的代码不再更新。
原始代码
update = "UPDATE store SET added_customer = 'y' WHERE order_id = ?";
try {
PreparedStatement pStmnt = getConn().prepareStatement(update);
pStmnt.setString(1, orderId);
results = pStmnt.executeUpdate();
if (results > 0) {
added = true;
}
} catch (SQLException ex) {
LOGGER.error(ex.toString());
}
没有抛出异常,但没有更改数据,所以我认为“自动提交一定不起作用,让我们手动提交”:
新代码
update = "UPDATE shop_ca_orders SET added_customer = 'y' WHERE order_id = ?";
try {
getConn().setAutoCommit(false); //Added
PreparedStatement pStmnt = getConn().prepareStatement(update);
pStmnt.setString(1, orderId);
results = pStmnt.executeUpdate();
if (results > 0) {
added = true;
getConn().commit(); //Added
getConn().setAutoCommit(true); //Added
}
} catch (SQLException ex) {
LOGGER.error(ex.toString());
}
仍然没有运气,所以我LOGGER.debug("Update to order returned {}",results);
在executeUpdate
声明之后添加,发现我返回 0,所以没有记录被更新。
很有趣,所以我通过 SQL Developer 尝试了查询,它正确更新了。这让我想到了我的问题:
为什么我无法通过 JDBC 更新我的数据库?
基本数据:
order_id
是类型VARCHAR(255 BYTE)
。- 爪哇 7
- 在 Amazon RDS 上运行的 Oracle 11GR2
- 从运行在 Heroku 上的 PostgreSQL 9.1 迁移而来
- 在 PostgreSQL
order_id
上是一个character varying(255)
编辑
未检测到小的架构更改并导致错误,其中订单 ID 实际上是人的姓名,而不是订单 ID。我的骨头错误。无论如何,既然我已经解决了这个问题并提取了正确的订单 ID,我发现我正在坚持executeUpdate
。目前正在研究该问题。如果我无法解决,我可能会创建一个新问题。