我試圖學習如何使用MySQL和Java,並且標題所示,我在準備語句時遇到問題。傳遞表名作爲準備語句的參數
我有一個MySQL表名爲temp這(直接輸出從MySQL控制檯)包含的值:
mysql> select * from temp;
+------+-----------------------------------------------+
| id | value |
+------+-----------------------------------------------+
| 1 | this is a first item |
| 2 | this is the second item |
| 3 | This is the third item and slightly redundant |
+------+-----------------------------------------------+
3 rows in set (0.00 sec)
在Java中,我訪問DB這樣的:
stmt = conn.prepareStatment("select * from ?");
stmt.setString(1,"temp");
ResultSet rs = stmt.executeQuery(); //This method call throws the exception
stmt.toString
揭示:select * from 'temp'
和例外消息是:You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''temp'' at line 1
當我輸入select * from 'temp'
(輸出把stmt.toString()
)直接放到MySQL控制檯中,我得到完全相同的信息。正如你可能已經想象的那樣,我打算將這個概念應用到一個JSP網頁上,其中表名將是一個HTTP GET參數。所以我的問題是:如何將表名綁定到準備好的語句,如果它不可能(這是我從PHP的類似問題得到的氛圍),我將如何清理表名的輸入?
是的,我看到了,但答案並不是非常有信心或對此有幫助。爲了未來遇到這個問題的每一個人,我希望得到更好的答案或解決問題的辦法,這不會犧牲安全性。 – Alex
你不應該需要淨化一個表名(不像表單數據),所以我不明白這是一個問題。 – blackcompe
我想要製作一個帶有多個卡片主題的flashcard程序,所以我希望每個主題都是不同的表格(不同的主題可能需要存儲不同的信息)。 – Alex