我一直在從PostgreSQL 9.1遷移到Oracle 11gR2,並遇到了一個奇怪的問題。爲什麼我的JDBC更新無法正常工作?
我一直在運行的代碼,當客戶已添加到我們的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());
}
仍然沒有運氣,所以我在0123後增加聲明,並發現我返回0,因此沒有記錄正在更新。
有趣的,所以我想通過SQL Developer中的查詢,並將其正確更新。這使我想起了我的問題:
爲什麼我無法通過JDBC來更新我的數據庫?
必要的數據:
order_id
是類型VARCHAR(255 BYTE)
。- 爪哇7
- 甲骨文11gR2的上亞馬遜RDS運行
- 從PostgreSQL的9.1遷移在Heroku運行
- 論的PostgreSQL
order_id
是character varying(255)
EDIT
小模式更改未被發現並導致錯誤,其中訂單ID實際上是該人的姓名,而不是訂單ID。 Bonehead錯誤在我的結尾。無論如何,現在我已經解決並拉動正確的訂單ID,我發現我掛在executeUpdate
。目前正在處理這個問題。如果我無法解決,我可能會創建一個新問題。
我從來沒有考慮過,讓我給它一個旋轉 –
仍然返回0爲更新。 getConn()返回在類構造函數中創建的連接對象。沒有使用池。 –
儘管這不是一個直接的答案,但它指出了我需要調查才能找到答案。謝謝 –