Matcher.quoteReplacement 与准备好的语句

发布于 2024-10-21 21:17:55 字数 168 浏览 2 评论 0原文

在我的项目中,我必须根据传递的表创建插入语句。 所以我有两个选择 1)编写preparedstatement并批量运行 2)创建插入表值(..),(..),(..)

我想知道如果我使用Matcher.quoteReplacement()来转义值,则更喜欢(1)而不是(2)的原因

谢谢进步

In my project I have to create insert statements based on the tables passed.
So I have two options
1)Write preparedstatement and run it in batch
2)Create insert into table values(..),(..),(..)

I want to know the reasons to prefer (1) over (2) if I use Matcher.quoteReplacement() to escape the values

Thanks in advance

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

神魇的王 2024-10-28 21:17:55

Matcher.quoteReplacement 无意引用 SQL 字符串,因此您无法确定是否避免使用它进行 SQL 插入。但是,即使您有一个有效的引用函数,准备好的语句仍然会更好,原因如下:

  • 您不必担心忘记引用输入
  • 您不会试图走捷径而不引用您“知道”的值安全
  • 数据库可以缓存执行计划,以避免解析具有不同参数的类似 SQL 查询,从而提高性能
  • 代码变得更具可读性(恕我直言)

Matcher.quoteReplacement isn't intended to quote SQL strings, so you can't be certain to avoid SQL insertions using it. But even if you had a working quoting function, prepared statements would still be better for several reasons:

  • You don't need to worry about forgetting to quote input
  • You're not tempted to take a shortcut and not quote values you "know" are safe
  • The database can cache the execution plan to avoid parsing similar SQL queries with different parameters, giving a performance boost
  • The code gets more readable (IMHO)
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文