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

时间:2015-12-12 02:37:55

标签: java sql resultset

我正在查询表,它返回未知数量的行。我试图建立一个类似这样的动态查询:

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

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

2 个答案:

答案 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;
}