广告
返回顶部
首页 > 资讯 > 后端开发 > Python >jOOQ串联字符串拒绝使用的原因实例
  • 564
分享到

jOOQ串联字符串拒绝使用的原因实例

jOOQ串联字符串jOOQ字符串 2022-11-13 13:11:30 564人浏览 薄情痞子

Python 官方文档:入门教程 => 点击学习

摘要

jOOQ开箱即支持大量的sql语法。因此,大多数用户在使用JDBC编写动态SQL时,不会像以前那样采用字符串连接的方式。 但时不时地,jOOQ不支持某个厂商的特定功能(是的,它发生

jOOQ开箱即支持大量的sql语法。因此,大多数用户在使用JDBC编写动态SQL时,不会像以前那样采用字符串连接的方式。 但时不时地,jOOQ不支持某个厂商的特定功能(是的,它发生了)。在这种情况下,jOOQ支持各种"普通SQL "api,它可以用来构造几乎所有类型的jOOQ API元素,比如:

但是,有时候,你需要动态地传递一个参数给这样的函数,比如说另一个列的表达式。而你想以一种类型安全的方式做到这一点,因为jOOQ代码生成器已经产生了类型安全的列表达式。所以你可能会倾向于串联,尽管如此:

field("cool_function(1, " + MY_TABLE.MY_COLUMN + ", 3)");

千万不要这样做!因为这些原因:

  • 尽管jOOQ在一般情况下是非常安全的SQL注入,但事实上你还是可以在这里引入一个普通的SQL注入漏洞。在这种情况下不会,因为该列是生成的代码,但也许,你会把用户的输入连接起来。请注意,为了增加SQL注入保护,可以通过添加我们的PlainSQL检查器,使用检查器框架Google ErrorProne,在全局范围内防止普通SQL的使用,只在需要时允许本地使用。
  • 和以往的字符串连接一样,你很容易出现SQL语法错误。在这种情况下,生成的SQL不针对任何方言,因为MY_TABLE.MY_COLUMN.toString() ,没有任何上下文信息,如SQLDialect 和所有其他配置标志。

相反,使用jOOQ的纯SQL模板小语言,它允许模板占位符,如{0}, {1}, {2} :

field("cool_function(1, {0}, 3)", MY_TABLE.MY_COLUMN);

如果你经常这么做,你可以在你自己的迷你DSL中考虑这个调用:

public static Field<String> coolFunction(Field<?> field) {
    field("cool_function(1, {0}, 3)", field);
}

而现在,像这样调用:

coolFunction(MY_TABLE.MY_COLUMN)

作为一个经验法则:使用jOOQ,你应该永远不需要借助于SQL字符串连接,你可以始终使用以下两种方法:

  • 类型安全的jOOQ DSL API
  • 普通的SQL模板API(最好是把这种用法隐藏在你自己的类型安全DSL API后面)

以上就是jOOQ串联字符串拒绝使用的原因实例的详细内容,更多关于jOOQ串联字符串的资料请关注编程网其它相关文章!

--结束END--

本文标题: jOOQ串联字符串拒绝使用的原因实例

本文链接: https://www.lsjlt.com/news/171413.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作