在ResultSet上迭代的Java会过早停止

时间:2013-10-09 16:19:20

标签: java sql resultset

我正在尝试以.csv格式编写整个sql表。该表长6500行,但文件中只写600行左右。每次运行方法时,写入的行数都会有所不同

Connection con = Panel.getConnection();
String query = "SELECT * from group3.merged_person";    

PreparedStatement statement = con.prepareStatement(query);

ResultSet srs = statement.executeQuery();

int totalColumns = srs.getMetaData().getColumnCount();
FileWriter writer = new FileWriter("merged_person.csv");

for(int i = 1; i <= totalColumns; i++) {
    writer.write(srs.getMetaData().getColumnLabel(i) + ",");
}

writer.write("\n");
int lines  = 0;

while(srs.next()) {
    lines++;

    for(int j = 1; j <= totalColumns; j++) {
        writer.write(srs.getString(j) + ",");
    }

    writer.write("\n");
}

System.out.println("lines written " + lines);
writer.close();

3 个答案:

答案 0 :(得分:1)

您可以考虑添加:

writer.flush();

之前的

writer.close();

这应该强制将任何缓冲的内容写入目标文件。

答案 1 :(得分:0)

我不认为问题出在这部分代码中。听起来几乎就像你的连接过早死亡一样。由于您未在此方法中关闭它,请在此方法的最后检查srs.isClosed()con.isClosed(),看看它们是否在其他地方关闭。

答案 2 :(得分:0)

从group3.merged_person开始执行SELECT计数(*),以确保将读取多少行。也许其他人正在修改那张桌子。