Java/SQL Server中的预处理语句没有返回任何结果


List<Guest> guestList = new ArrayList<>();
String query = "select * from Guests where ? like ?";
System.out.println("select * from Guests where " + property + " like '%" + value + "%'");
PreparedStatement preparedStatement = connection.prepareStatement(query);
preparedStatement.setString(1, property);
preparedStatement.setString(2, "'%" + value + "%'");
ResultSet resultSet = preparedStatement.executeQuery();
guestList = getGuestListFromResultSet(resultSet);
return guestList;

正如您在上面看到的,我创建了一个Prepared Statement,稍后用2个值填充它:property和value。在SQL Server中运行上述查询应该会给我一些结果。我还尝试了这些变化来设置第二个参数(值):

preparedStatement.setString(2, "%" + value + "%");
preparedStatement.setString(2, value);

这些似乎都不起作用。真正起作用的是简单地从字符串连接构建查询:

PreparedStatement preparedStatement = connection.prepareStatement("select * from Guests where " + property + " like '" + value + "'");

但是,我想使用一个准备好的语句。

不能使用变量作为列名。相反,您可以使用动态SQL

String query = """
DECLARE @sql nvarchar(max) = '
select *
from Guests
where ' + QUOTENAME(?) + ' like @value;
';
EXEC sp_executesql @sql,
N'@value nvarchar(100)',
@value = ?;
""";

注意使用QUOTENAME来正确转义列名。

还要注意使用sp_executesql来传递值。

我不确定JDBC驱动程序,但理想情况下,您应该使用正确命名的参数,而不是?