在 ResultSet 的每一行的末尾注入一个字符串,最后一行除外

Inject a string at the end of every row of a ResultSet except the last one

我正在查询 table 并且它 returns 行数未知。我正在尝试构建一个如下所示的动态查询:

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,但它 returns 类似于:

select * from table where cond1 UNION select * from table where cond2 UNION

达到预期结果的最佳方法是什么?谢谢!

可以在前面加上"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);
}

好吧,您可以调用 ResultSet.isLast() 函数来检查是否应附加后缀,但它是可选的(您的 JDBC 提供商可能不会实现),也可能是贵。

一个更好的主意可能是在循环开始而不是结束时附加额外的东西:

String originalSql = sql_string + " ";
String append = " "; 
while(res.next()) {
   sql_string += append + res.getString(1);            
   append = " union " + originalSql;
}