在 Java 或 Groovy 中使用“IN”的 SQL 查询 [重复]

Posted

技术标签:

【中文标题】在 Java 或 Groovy 中使用“IN”的 SQL 查询 [重复]【英文标题】:SQL queries with 'IN' in Java or Groovy [duplicate] 【发布时间】:2022-01-22 22:11:06 【问题描述】:

我写了一个 SQL 查询:

select sum(amount) as totalAmount 
from employee_account 
where id = 29967 
and repayment_status in ("MARKEDPAID", "PAID", "PENDING", "OVERDUE");

此查询在 mysql 控制台中运行良好。我必须使用 Java 执行此查询

String query = ""
int id = 123
Connection connection = // connection code 
Statement statement = connection.createStatement()
ResultSet resultSet = statement.executeQuery(query)

我写的

query = "select sum(amount) as totalAmount from employee_account where id = $id and repayment_status in ()"

如何在上面的字符串查询中传递"MARKEDPAID", "PAID", "PENDING", "OVERDUE"

【问题讨论】:

单引号? in ('MARKEDPAID', 'PAID', 'PENDING', 'OVERDUE') 这是正确的吗? @AnkitSharma 是的 MySQL 可以使用单引号或双引号,只要您保持一致即可 不工作我必须通过java代码执行 ***.com/questions/1327074/… 【参考方案1】:
String status = "\'OVERDUE\',\'PAID\',\'PENDING\',\'MARKEDPAID\'"
String query = "select sum(amount) as totalAmount from employee_account where id = $id and repayment_status in ($status)"

【讨论】:

您的代码易受 SQL 注入攻击。不要使用字符串插值将值添加到查询字符串中,使用 JDBC 参数(在 这种 情况下使用 $status 是安全的,但 $id 不是!)。

以上是关于在 Java 或 Groovy 中使用“IN”的 SQL 查询 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

错误记录Groovy 运行报错 ( Exception in thread “main“ groovy.lang.MissingMethodException: No signature of )

Groovy 或 Java 上的跨平台蜂鸣声

使用 Groovy 或 Java 将日志发送到 Syslog 服务器

java程序员为啥使用Groovy

获得使用 Java 或 Groovy 填充的有效 oauth_signature 的绝对最少代码?

获得使用 Java 或 Groovy 填充的有效 oauth_signature 的绝对最少代码?