见ps,一个完成这项工作的简单PreparedStatement:
PreparedStatement ps = cnx.prepareStatement( "SELECT * FROM mytable WHERE ref=? AND time=>? AND time<?");
我需要添加3个可选标准(C1,C2,C3)。为清楚起见,它们可能不需要基于运行时参数。
蛮力告诉我,我可以编写9个准备好的语句来涵盖所有可能性。但我真正想写的更像是:
SELECT * FROM mytable WHERE ref=? AND time=>? AND time<? AND C1=? AND C2=? AND C3=?;
在执行语句之前使用setInt(5,“ ANY ”)或ignoreParameter(5)之类的技巧 有这样的事吗?
答案 0 :(得分:2)
答案 1 :(得分:1)
您可以选择使用框架,自己动手或做一些sql技巧。例如。 JPA有CriteriaBuilder。
否则将您的查询拆分为静态和动态部分。根据您的动态部分,您必须进行绑定。你会有
SELECT * FROM mytable WHERE ref=? AND time=>? AND time<?
作为您的静态部分,仅在需要时添加AND C1 = ?
。
对于SQL选项,您可以添加3个参数并将其设置为0
或1
。
SELECT * FROM mytable WHERE ref=? AND time=>? AND time<?
AND (CHECKC1 = ? OR C1=?) AND (CHECKC2 = ? OR C2=?) AND (CHECKC3 = ? OR C3=?);
但我不认为这是一个很好的解决方案。