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;
正如您在上面看到的,我創建了一個準備好的陳述句,稍后填充了 2 個值:屬性和值。運行上面的查詢應該會在 SQL Server 中給我一些結果。我還嘗試了這些變體來設定第二個引數(值):
preparedStatement.setString(2, "%" value "%");
preparedStatement.setString(2, value);
這些似乎都不起作用。什么作業只是從字串連接構建查詢:
PreparedStatement preparedStatement = connection.prepareStatement("select * from Guests where " property " like '" value "'");
但是,我想使用準備好的陳述句。
uj5u.com熱心網友回復:
您不能使用變數作為列名。相反,您可以使用動態 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 驅動程式,但理想情況下您應該使用正確的命名引數,而不是
?
轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/341211.html
標籤:爪哇 sql sql-server 休眠 行家
