我正在使用JDBC
連接到Servlet中的數據庫(Oracle10)。
以下是我想要動態設置三個參數的查詢。oracle異常:表名無效
- 表名
- 列名
- 價值
查詢:
query = "select ? from ? where ? = ?";
mypstmt = con.prepareStatement(query);
mypstmt.setString(1, tableName);
mypstmt.setString(2, columnName);
mypstmt.setString(3, columnName2);
mypstmt.setString(4, value);
但上面的查詢是給我的錯誤:
java.sql.SQLException: ORA-00903: invalid table name
我檢查了表名。它是正確的,如果我寫這樣的查詢:
query = "select "+columnName+" from "+tableName+" where "+columnName2+" = ?";
然後它執行正常。
所以,我應該怎麼做,如果我想設置Table name
和Column Names
爲mypstmt.setString(1,tableName)
EDIT1 我爲什麼要parameterize
的Table name
和Column name
是我允許用戶選擇/輸入表的原因名稱和列名,所以我想避免SQL Injection
。
列名可以使用'PreparedStatement'作爲參數傳遞嗎? – user75ponic
@Polppan - no。只有值可以作爲參數傳遞。 (否則,SQL引擎將無法預先編譯/計劃準備好的語句,並且您有更多的注入攻擊範圍等) –
否................. ..... – NINCOMPOOP