2017-06-05 63 views
0

标题说明了一切。这是我的ResultSet代码:无法获得SQL结果写入文件Java

try { 
    while (rs.next()) { 
     int ID = rs.getInt("ID"); 
     String Name = rs.getString("Name"); 
     String CountryCode = rs.getString("CountryCode"); 
     String District = rs.getString("District"); 
     int Population = rs.getInt("Population"); 

     //Display values 
     try { 
      writeToFile(ID, Name, CountryCode, District, Population); 
     } catch (IOException e) { 
      e.printStackTrace(); 
     } 
    } 

这是我将writeToFile方法:

public void writeToFile(int id, String name, String countryCode, String district, int population) throws IOException { 
    FileWriter fw = new FileWriter("C:\\Users\\horry\\Desktop\\results.txt"); 
    fw.write(id + " " + name + " " + countryCode + " " + district + " " + population + "\n"); 
    try { 
     fw.flush(); 
     fw.close(); 
    } catch (IOException e) { 
     e.printStackTrace(); 
    } 
} 

我用尽通常的冲洗和close方法,但缺少的东西。应该向其他人宣布编写文件吗?

+0

没有例外的代码。一行被写入,但ID不正确。你知道更好的方法吗? –

+0

您是否可以使用调试器(或日志记录)来查看是否正在填充名称,countryCode等变量(或者编写一个测试用例传入这些参数的硬编码值)? – John

回答

2

尝试打开文件,附加选项

FileWriter fw = new FileWriter("C:\\Users\\horry\\Desktop\\results.txt", true); 

在任何平台上增加新的线路(如Linux)的使用一般的行分隔符,如下

fw.write(id + " " + name + " " + countryCode + " " + district + " " + population + System.getProperty("line.separator")); 
+0

这工作的意义,我的文件现在填补。任何想法为每个查询创建新行? –

+0

更新为每个查询的新行,请接受答案,如果它的工作 – user7294900

-1

您正在打开一个新的FileWriter每个迭代你的ResultSet。默认情况下,FileWriter在文件的开头处写入。所以你不断覆盖你在前一次迭代中写入文件的内容。

此外,我建议不要在每次迭代时创建一个新的FileWriter。我只打开一次FileWriter,并在所有餐厅中使用同一个。

然后,使用BufferedWriter而不是纯FileWriter。它会更快。

另外,关闭作家在finally块中,而不是在try。从Java 7开始,你甚至可以使用try-with-resources。

最后,使用br.newLine();来写一个新行,而不是自己管理“\ n”。

请检查下面

File f = new File("C:\\Users\\horry\\Desktop\\results.txt"); 
try (BufferedWriter bw = new BufferedWriter(new FileWriter(f))) { 
    while (rs.next()) { 
     int id = rs.getInt("ID"); 
     String name = rs.getString("Name"); 
     String countryCode = rs.getString("CountryCode"); 
     String district = rs.getString("District"); 
     int population = rs.getInt("Population"); 
     bw.write(id + " " + name + " " + countryCode + " " + district + " " + population); 
     bw.newLine(); 
    } 
}