【发布时间】:2011-03-09 08:04:30
【问题描述】:
我想知道是否有任何方法可以使用准备好的语句指定返回的列名。
我正在使用 MySQL 和 Java。
当我尝试时:
String columnNames="d,e,f"; //Actually from the user...
String name = "some_table"; //From user...
String query = "SELECT a,b,c,? FROM " + name + " WHERE d=?";//...
stmt = conn.prepareStatement(query);
stmt.setString(1, columnNames);
stmt.setString(2, "x");
我得到了这种类型的语句(在执行前打印)。
SELECT a,b,c,'d,e,f' FROM some_table WHERE d='x'
不过,我希望看到:
SELECT a,b,c,d,e,f FROM some_table WHERE d='x'
我知道我不能对表名执行此操作,如前所述 here,但想知道是否有办法对列名进行处理。
如果没有,那么我只需要尝试确保我对输入进行了清理,以免导致 SQL 注入漏洞。
【问题讨论】:
标签: java sql jdbc prepared-statement