我正在使用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