2011-03-03 107 views
1

我需要在Java中使用字符串列表做一個大的SQL查詢對一個MySQL數據庫,例如:逃逸字符串爲MySQL在Java中

SELECT * FROM db_table WHERE id IN (....); 

不幸的是,輸入API有幾分限制在這裏和我只給出一個字符串列表作爲輸入。

通常我只想用一個參數化查詢,但不會允許我通過一個逗號分隔的列表,以便像下面這樣將無法工作:

SELECT * FROM db_Table WHERE id IN (?); 
preparedStaement.Set(1, "A,B,C,D,E"); 

我在這個線程了一下:PreparedStatement IN clause alternatives?

不幸的是沒有更具創意的選項可以工作,因爲我沒有對數據庫的寫入權限,所以我不能創建臨時表。

那麼 - 任何想法?我只關心MySQL作爲底層的源代碼,所以如果解決方案是特定於MySQL的,那很好。

在此先感謝

編輯:單獨逃離每個字符串將被罰款 - 但有什麼辦法呢,在Java中?我沒有找到很好的運氣,我只能從apache看到一些我不能使用的東西。

- 丹

+1

所以也是我所鏈接的主題中回答沒有幫助?另一種方式:順便說一句:http://stackoverflow.com/questions/2861230/what-is-the-best-approach-using-jdbc-for-parameterizing-an-in-clause – BalusC 2011-03-03 03:19:41

+0

我確實看到 - 我是希望我不必這樣做 - 但我想因爲沒有更好的答案 - 我會去那樣做。 – debracey 2011-03-03 14:21:19

回答

2

你有兩個明顯的選擇:

  1. 構建查詢動態以及其輸入。也就是說,對於需要包含的每個字符串,添加一個?在將其傳遞給PreparedStatement之前查詢。

    SELECT * FROM table WHERE id = ? OR id = ? OR id = ? OR id = ? ...

  2. 不要使用綁定在這裏。單獨轉義字符串並將其直接放入查詢中。

...可能還有一些不太明顯的選項,我沒有想到。

+0

單獨轉義字符串會很好 - 但是有沒有一些方法可以在Java中執行?我可以寫我自己的 - 但我覺得有很多角落案例 – debracey 2011-03-03 02:57:53