gpt4 book ai didi

java - Java 中的动态 SQL 查询

转载 作者:行者123 更新时间:2023-12-01 06:22:14 24 4
gpt4 key购买 nike

我有一个函数

public void executeMyQuery(Connection con) {
PreparedStatement ps = con.prepareStatement("SELECT * FROM STUDENT WHERE ID = ?");
ps.setInt(1, 7);
ps.executeQuery();
}

如果我运行它,它会工作得很好。但我想这样做。

  1. 如果我要 setInt,它应该包含 WHERE 子句。 (返回匹配的行)
  2. 如果我不 setInt 它应该排除 WHERE 子句。 (返回整个表)

或者是否有任何方法可以动态删除或修改 WHERE 子句之后的字符串。

最佳答案

使用基于字符串的 SQL 进行动态 SQL 的缺点

其他答案已经展示了如何使用基于字符串的 JDBC 用法来实现动态 SQL。使用字符串连接动态构建 SQL 字符串有很多缺点,包括:

  • 如果您不小心将用户输入连接到 SQL 查询,则 SQL 注入(inject)的风险很高
  • 当动态 SQL 变得更加复杂时,在重要情况下很难避免语法错误

此外,当您使用普通 JDBC(仅支持索引绑定(bind)变量),而不是某些实用程序(例如 Spring JdbcTemplate)时, MyBatis , jOOQ等。您必须手动将 ? 占位符与其相应的索引相匹配,这是另一个微妙的错误来源。

使用查询生成器

在某些时候,当您更频繁地实现动态 SQL 查询时,查询构建器肯定会有所帮助。最流行的是:

还有许多其他选项或多或少维护得很好。对于非常琐碎的情况(例如您问题中的情况),您还可以构建自己的简单谓词构建器。

免责声明:我在 jOOQ 背后的公司工作。

关于java - Java 中的动态 SQL 查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48092988/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com