try {
stmt = conn.createStatement();
stmt1 = conn.createStatement();
stmt2 = conn.createStatement();
rs = stmt.executeQuery("select cust from trip1");
rs1 = stmt1.executeQuery("select cust from trip2");
rs2 = stmt2.executeQuery("select cust from trip3");
File f = new File(strFileGenLoc);
OutputStream os = (OutputStream)new FileOutputStream(f,true);
String encoding = "UTF8";
OutputStreamWriter osw = new OutputStreamWriter(os, encoding);
BufferedWriter bw = new BufferedWriter(osw);
}
while ( rs.next() ) {
while(rs1.next()){
while(rs2.next()){
bw.write(rs.getString(1)==null? "":rs.getString(1));
bw.write("\t");
bw.write(rs1.getString(1)==null? "":rs1.getString(1));
bw.write("\t");
bw.write(rs2.getString(1)==null? "":rs2.getString(1));
bw.write("\t");
bw.newLine();
}
}
}
以上代码正常工作。 我的问题是 1.“rs”结果集在表中包含一条记录 2.“rs1”结果集在表中包含5条记录 3.“rs2”结果集在表中包含5条记录
“rs”数据正在递归。
在写入同一文本文件时,我得到的输出
1 2 3
1 12 21
1 23 25
1 10 5
1 8 54
但我需要输出如下
1 2 3
12 21
23 25
10 5
8 54
我需要在代码中更改哪些内容..请提供建议
答案 0 :(得分:0)
这有帮助吗?
while ( rs.next() ) {
bw.write(rs.getString(1)==null? "":rs.getString(1));
while(rs1.next()){
while(rs2.next()){
bw.write("\t");
bw.write(rs1.getString(1)==null? "":rs1.getString(1));
bw.write("\t");
bw.write(rs2.getString(1)==null? "":rs2.getString(1));
bw.write("\t");
bw.newLine();
}
}
}
答案 1 :(得分:0)
您必须使用公共列(通常称为外键)加入这三个表。表trip2
和trip3
中的值表示它们属于表trip1
中的哪个条目。然后你可以这样做:
select t1.cust, t2.cust, t3.cust
from trip1 t1
join trip2 t2 on t1.id = t2.trip1_id
join trip3 t3 on t1.id = t3.trip1_id
order by t1.id
现在,您将在单个结果集中获得所有结果。要获得所需的输出,请仅在更改时打印第一列(rs.getString(1)
)。
答案 2 :(得分:0)
这里的逻辑是有缺陷的。如果您只在rs2中获得一个结果,那么您只会显示一行,因为在您运行一次后while(rs2.next())
将为false。一种选择是迭代所有结果集,将值放入数组中,然后迭代它们以将行放到文件中。正如@Aaron Digulla所暗示的更好的解决方案是从数据库中只返回一个ResultSet
。