2013-01-18 61 views
2

考慮下面的代碼:爲什麼我無法使用預處理語句來更新數據庫?

String updatestmt = "UPDATE marketplaces.amazon_merchant_fulfilled_orders SET order_status = ? WHERE amazon_order_id=?;"; 

Connection conn = connectToDatabase(); 
PreparedStatement pstInsert = conn.prepareStatement(updatestmt); 
pstInsert.setString(1, orderId); 
pstInsert.setString(2, status); 
try { 
    int rowsAffected = pstInsert.executeUpdate(); 
    System.out.println("Updated " + rowsAffected + " Line(s)."); 
... 

當執行這段代碼,rowsAffected總是0

如果我改變updatestmt到:

"UPDATE marketplaces.amazon_merchant_fulfilled_orders SET order_status = '"+status+"' WHERE amazon_order_id='"+orderId+"';";並取出pstInsert.setString調用代碼工作正常。

我的問題是爲什麼我無法使用預處理語句來更新我的數據庫?

平臺:在PostgreSQL 9.2和Java 7

回答

5

你設定錯誤的順序的參數。注:

UPDATE marketplaces.amazon_merchant_fulfilled_orders 
SET order_status = ? WHERE amazon_order_id=? 

而且你發送

pstInsert.setString(1, orderId); 
pstInsert.setString(2, status); 

更改,以使其工作

pstInsert.setString(1, status); 
pstInsert.setString(2, orderId); 
+0

哇 - 不能相信我錯過了一個。 –