Java 查询中的字符串参数

Java 查询中的字符串参数,java,mysql,groovy,Java,Mysql,Groovy,我是一名程序员学习者 我想得到以下格式的MySQL查询 select status from training where status in ("Open", "Delivered") 从我的代码 if(params.openCheckBox){ query +=" ( t.status IN ("+params.openCheckBox+", "+params.DeliveredCheckBox+")" query +=" )" } 但它给 select st

我是一名程序员学习者

我想得到以下格式的MySQL查询

 select status from training where status in ("Open", "Delivered")
从我的代码

if(params.openCheckBox){
    query +=" ( t.status  IN ("+params.openCheckBox+", "+params.DeliveredCheckBox+")" 
    query +=" )"
}
但它给

   select status from training where status in (Open, Delivered)

在这里“”(缺少双引号)

\
转义双引号,MySQL接受双引号来包装字符串

query +=" ( t.status  IN (\""+params.openCheckBox+"\", \""+params.DeliveredCheckBox+"\")" 
query +=" )"
或 只需使用单引号

query +=" ( t.status  IN ('"+params.openCheckBox+"', '"+params.DeliveredCheckBox+"')" 
query +=" )"
上面的查询易受
sql注入
的攻击。使用
PreparedStatement
如下所示

代码段:

dbConnection = getDBConnection();
String query = "SELECT .... FROM .... WHERE t.status IN (?, ?)";
PreparedStatement preparedStatement = dbConnection.prepareStatement(query);
preparedStatement.setString(1, params.openCheckBox);
preparedStatement.setString(2, params.DeliveredCheckBox);
ResultSet rs = preparedStatement.executeQuery();
来源


使用
\
转义双引号,MySQL接受双引号来包装字符串

query +=" ( t.status  IN (\""+params.openCheckBox+"\", \""+params.DeliveredCheckBox+"\")" 
query +=" )"
或 只需使用单引号

query +=" ( t.status  IN ('"+params.openCheckBox+"', '"+params.DeliveredCheckBox+"')" 
query +=" )"
上面的查询易受
sql注入
的攻击。使用
PreparedStatement
如下所示

代码段:

dbConnection = getDBConnection();
String query = "SELECT .... FROM .... WHERE t.status IN (?, ?)";
PreparedStatement preparedStatement = dbConnection.prepareStatement(query);
preparedStatement.setString(1, params.openCheckBox);
preparedStatement.setString(2, params.DeliveredCheckBox);
ResultSet rs = preparedStatement.executeQuery();
来源


您可以使用单引号代替

query +=" ( t.status  IN ('"+params.openCheckBox+"', '"+params.DeliveredCheckBox+"')"

您可以使用单引号代替

query +=" ( t.status  IN ('"+params.openCheckBox+"', '"+params.DeliveredCheckBox+"')"

为什么需要双引号?@michaeladan因为他正在传递
String
值。和
String
值应该用引号括起来。然后使用单引号代替。为什么要添加
grails
标记?如果您使用的是grails,请查看GORM而不是原生MySQL…为什么需要双引号?@MichaelArdan,因为他正在传递
String
值。和
String
值应该用引号括起来。然后使用单引号代替。为什么要添加
grails
标记?如果您使用的是grails,请查看GORM,而不是使用本机MySQL。。。