如何创建不带单引号的PreparedStatement? [重复]

问题描述 投票:0回答:1

如何创建准备好的语句并添加不带“ ”的字符串?我已经创建了此类的PreparedStatement:

var query = "Select ? From mytable where rootId = ?";
var statement = connection.prepareStatement(query);
        statement.setObject(1, result);
        statement.setObject(2, rootId);
        return statement;

但是我得到了这样的声明:

Select 'someField' From mytable where rootId = 'wdcfr';

这样的 ' ' 破坏了我的要求,我想创建一个没有 ' ' 的声明。 someField 值取决于用户输入。 我怎样才能做到?

java sql prepared-statement
1个回答
-2
投票

准备好的语句旨在处理参数值,而不是列或表名称。占位符(“?”)旨在用于数据库驱动程序将正确转义和引用的值,以防止 SQL 注入。

如果需要根据用户输入动态更改 SQL 查询中的列名或表名,则必须手动构造 SQL 字符串。例如:

String result = "column_name"; // column name that you want to be displayed

String query = "SELECT " + someField + " FROM mytable WHERE rootId = ?";

PreparedStatement statement = connection.prepareStatement(query);
statement.setObject(1, rootId);

return statement;

让我知道这是否有帮助。

© www.soinside.com 2019 - 2024. All rights reserved.