Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/80.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
无法获取SQL结果以写入Java文件_Java_Sql - Fatal编程技术网

无法获取SQL结果以写入Java文件

无法获取SQL结果以写入Java文件,java,sql,Java,Sql,标题说明了一切。这是我的结果集代码: 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

标题说明了一切。这是我的结果集代码:

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

我尝试了通常的冲洗和关闭方法,但缺少了一些东西。是否应将filewriter声明为elsewgere?

尝试使用append选项打开文件

 FileWriter fw = new FileWriter("C:\\Users\\horry\\Desktop\\results.txt", true);
要在任何平台(如linux)中添加新行,请使用通用行分隔符,如下所示

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

您正在为结果集的每个迭代打开一个新的FileWriter。默认情况下,FileWriter在文件开头写入。因此,您正在不断地覆盖您在上一次迭代中在文件中写入的内容

此外,我建议不要在每次迭代中创建新的FileWriter。我只会打开一个文件编写器一次,然后对所有的文件使用同一个文件编写器

然后,使用BufferedWriter而不是纯FileWriter。速度会快得多

另外,在finally块中关闭writer,而不是在try中。自Java7以来,您甚至可以对资源使用try

最后,使用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();
    }
}

没有例外。一行被写入,但ID不正确。您知道更好的方法吗?您可以使用调试器或日志来查看是否正在填充名称、countryCode等变量,或者编写一个测试用例来传递这些参数的硬编码值吗?这在我的文件现在已填充的情况下起作用。有没有关于为每个查询创建新行的想法?为每个查询更新新行,如果有效,请接受答案