我使用prepared语句在prepared语句中使用以下代码来设置会话变量。
String sessionVariable = "optimizer_search_depth" String sessionValue = "10"; preparedStatement stmt = connection.prepareStatement("set session ? = ?"); stmt.setString(1, sessionVariable); stmt.setString(2, sessionValue); stmt.executeQuery();
如果我使用此即时获取的SQL字符串,如下所示:
> set session 'optimizer_search_depth' = '10';
这将导致sql异常,因为它们周围有一个引号。我需要形成一个不带单引号的查询,例如
> set session optimizer_search_depth = 10;
您需要一些动态SQL。该代码应为:
String sessionVariable = "optimizer_search_depth"
String sessionValue = "10";
preparedStatement stmt = connection.prepareStatement(
"set session '" + sessionVariable + "' = ?"
);
stmt.setString(1, sessionValue);
stmt.executeQuery();
请确保sessionVariable
受到严格控制,并且它不是来自Web界面等外部来源的自由值。否则,此代码将容易受到SQL注入的攻击。