java - 查询中的字符串参数

标签 java mysql groovy

我是一名程序员学习者。

我想获取以下格式的 MySQL 查询

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

来 self 的代码

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 注入(inject)漏洞。使用 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();

来源

关于java - 查询中的字符串参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14374285/

相关文章:

mysql - 存储数据关系的更好方法(Redis 或 Mysql)

java - Spock 模拟方法实现在检查调用数时不起作用

java - 如何将类添加到 Eclipse 中 MBean Explorer 的类路径

java - 如何修复 "The import org.apache.poi cannot be resolved"

java - 为什么调用 preInstantiateSingletons()

java - clojure 中的 Scala 类

MySQL - Pythonanywhere - 同时添加 2 个值

php - 不从多个表返回数据(php/sql)

hibernate - 如何使测试中的一对一关系失败?

xml - 根据 XSD 模式验证 XML 并使用 groovy 捕获验证器期望