0

我正在尝试以 .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();
4

3 回答 3

1

您可以考虑添加:

writer.flush();

之前

writer.close();

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

于 2013-10-09T16:45:09.260 回答
0

在开始时从 group3.merged_person 执行 SELECT count(*) 以确定将读取多少行。也许其他人正在修改该表。

于 2013-10-09T16:51:58.847 回答
0

在我看来,问题出在这部分代码中。听起来几乎就像您的连接过早死亡。由于您没有在此方法中关闭它,请检查srs.isClosed()con.isClosed()在此方法结束时查看它们是否在其他地方关闭。

于 2013-10-09T16:41:11.960 回答