2013-10-09 77 views
0

我正在尝试以.csv格式编写整个sql表。该表格长6500行,但只有600行左右的文件被写入。每次我运行该方法时写入的行数都有所不同迭代ResultSet的Java过早停止

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(); 

回答

0

从group3.merged_person开始执行一个SELECT计数(*)以确保将读取多少行。也许其他人正在修改该表。

+0

其实有人在编辑数据库并把它搞砸了:) –

0

它看起来不像我这样的问题是在这部分代码中。听起来就像你的连接过早死亡一样。由于您没有以此方法关闭它,请在此方法的末尾检查srs.isClosed()con.isClosed(),并查看它们是否在其他地方关闭。

1

您可以考虑添加:

writer.flush(); 

writer.close(); 

这应该强迫任何缓冲的内容被写入到目标文件。

+1

关闭使隐式刷新。这并不能解释为什么只写了10%。 –

+0

@LluisMartinez,不确定接口实际上是如何指定的。 – stjohnroe

+1

不是接口,而是类实现。 –