将相同参数添加到准备好的语句中的多个位置的巧妙方法
我有一个 JDBC 查询,就像
select * from table1 where col1 between x and y
union all
select * from table2 where col1 between x and y
union all
select * from table3 where col1 between x and y
我正在使用准备好的语句一样,我想知道是否有一种更聪明的方法来设置 x 和 y 而无需说 setDate(1, x);setDate(2, y);setDate(3 , x);
I have a JDBC query like
select * from table1 where col1 between x and y
union all
select * from table2 where col1 between x and y
union all
select * from table3 where col1 between x and y
I'm using a prepared-statement and am wondering if there is a cleverer way to set x and y without saying setDate(1, x);setDate(2, y);setDate(3, x);
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
更聪明。也许是一个循环?执行 3 次并调用的 for 循环:
Cleverer. Maybe a loop? A for loop that executes three times and calls:
如果您的数据库不错,您可以这样做:
并仅传递
x
和y
一次。如果合适的话,优化器会将谓词应用于每个表。If your DB is decent, you can do:
and pass
x
andy
just once. The optimizer would apply the predicate to each table if appropiate.为什么要“聪明”?聪明的代码通常会在“聪明”的极端情况下导致“聪明”的错误。
顺便说一句,如果您使用 hibernate,您的查询将是:
Java 代码将如下所示:
why be "clever"? Clever code usually results in "clever" bugs in "clever" corner cases.
BTW if you use hibernate, your query would be:
Java code would look like this:
我会利用java的字符串格式化程序:
传递给格式方法的第一个参数是格式字符串。
%1$s
表示插入 string 类型的第 1 个参数(“5”),以及%2 $s
表示插入string 类型的第二参数(“10”)。然后,查询字符串将包含:
您可以阅读有关 Formatter 类的更多信息 此处。
希望这有帮助。
I would take advantage of java's String Formatter:
The first argument passed to the format method is the format string. The
%1$s
means to insert the 1st argument of type string ("5"), and the%2$s
means to insert the 2nd argument of type string ("10").The query string will then contain:
You can read more about the Formatter class here.
Hope this helps.