在 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;
}
我正在查询 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;
}