我正在查询表,它返回未知数量的行。我试图建立一个类似这样的动态查询:
sql_string = "select * from table where ";
while (res.next()) {
sql_string += res.getString(1) + "union"
}
etc etc.
基本上,res.next()
指的是先前执行的查询,我试图通过替换它的结果集中的值来构建查询。最终的查询应该是这样的:
select * from table where cond1
UNION
select * from table where cond2
,但它返回的内容如下:
select * from table where cond1
UNION
select * from table where cond2 UNION
达到预期效果的最佳方法是什么?谢谢!
答案 0 :(得分:1)
您可以在前面添加"union"
并跳过第一次迭代。例如:
sql_string = "select * from table where ";
String ret = sql_string;
boolean first = true;
while (res.next()) {
if(!first){
ret += " union " + sql_string;
}else{
first = false;
}
ret += res.getString(1);
}
答案 1 :(得分:1)
好吧,您可以调用ResultSet.isLast()
函数来检查是否应该追加后缀,但它是可选的(可能不是由JDBC提供程序实现),也可能很昂贵。
更好的想法可能是在循环开始时而不是在结尾处追加额外的东西:
String originalSql = sql_string + " ";
String append = " ";
while(res.next()) {
sql_string += append + res.getString(1);
append = " union " + originalSql;
}