2015-12-21 81 views
3

此表代表單選按鈕如何在`PreparedStatement`中提供表達式作爲參數

id | radio_id | value | is_selected 
------|-------------|----------|------------- 
1  | 10   | one  | false 
2  | 10   | two  | false 
3  | 10   | three | true 

我可以運行以下查詢來選擇另一個無線電。

UPDATE TABLE radios SET is_selected = (id = 1) WHERE radio_id = 10 

使用此查詢我也確保只選擇1個無線電框。

id | radio_id | value | is_selected 
------|-------------|----------|------------- 
1  | 10   | one  | true 
2  | 10   | two  | false 
3  | 10   | three | false 

但我不能做同樣的事情PreparedStatement

PreparedStatement ps = con.prepareStatement("UPDATE TABLE radios SET is_selected = ? WHERE radio_id = ?"); 
ps.setObject(1, "(id = 1)"); 
ps.setInt(2, 10); 

但後來我收到錯誤的字符串不能轉換爲boolean。 如何在預準備語句中提供表達式作爲參數。

+0

'UPDATE TABLE'? (第一次看到) – 2015-12-21 12:52:36

+0

不理解那部分''is_selected =(id = 1)''我假設你想在這裏設置一個布爾值......基本上這就是你的錯誤信息告訴你的。 。你嘗試設置一個String''(id = 1)'',但是一個布爾值是預期的。 – hatze

+0

爲什麼要將GUI模型保存在數據庫中?你只計劃支持一個用戶嗎? – EJP

回答

1

爲什麼不只是做:

con.prepareStatement("UPDATE radios SET is_selected = (id = 1) WHERE radio_id = ?"); 
+0

實際上,查詢是在其他一些類中動態創建的。我只能通過'where'來傳遞鍵值對和表名,即field_name-field_value對和表名與'where'。所以我不能那樣做。 – afzalex

2
PreparedStatement ps = 
    con.prepareStatement("UPDATE TABLE radios SET is_selected = (id = ?) WHERE radio_id = ?"); 
ps.setInt(1, 1); 
ps.setInt(2, 10); 
+0

實際上查詢是在其他一些類中動態創建的。我只能通過'where'來傳遞鍵值對和表名,即field_name-field_value對和表名與'where'。所以我不能那樣做。 – afzalex

+0

您允許更改創建查詢的方法嗎? –

+0

是的,但該方法正在許多地方使用。 – afzalex

相關問題