Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/326.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
Java 在将数据从csv文件迁移到数据库时,我应该在代码中改进什么_Java_Database_Postgresql_Csv - Fatal编程技术网

Java 在将数据从csv文件迁移到数据库时,我应该在代码中改进什么

Java 在将数据从csv文件迁移到数据库时,我应该在代码中改进什么,java,database,postgresql,csv,Java,Database,Postgresql,Csv,我有一个具有以下布局的CSV文件: 在我下面的代码中,如果我想在开始时获得没有空单元格和名称表的数据,我可以改进什么 public static void main(String[] args) { String path = "C:\\Users\\\\Desktop\\project\\x.csv"; File file = new File(path); Connection connect = null; Stateme

我有一个具有以下布局的CSV文件:

在我下面的代码中,如果我想在开始时获得没有空单元格和名称表的数据,我可以改进什么

public static void main(String[] args) {
        String path = "C:\\Users\\\\Desktop\\project\\x.csv";
        File file = new File(path);

        Connection connect = null;
        Statement s = null;

        try {
            BufferedReader br = new BufferedReader(new FileReader(file));
            String line;

            try {
                Class.forName("org.postgresql.Driver");
                connect =  DriverManager.getConnection("jdbc:postgresql://johnny.heliohost.org:5432/hostdb_allotments" +
                        "?user=hostdb_administrator&password=");

                s = connect.createStatement();
            } catch (Exception e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }

            while ((line = br.readLine()) != null) {
                            try {
                                String[] arr = line.split(",");
                String sql = "INSERT INTO Dzialki " +
                                            "(Nr_dzialki, Powierzchnia) " + 
                                            "VALUES ('" + arr[0] + "','" + arr[1] + "') ";
                s.execute(sql);
                            } catch (SQLException e) {
                    // TODO Auto-generated catch block
                e.printStackTrace();
                            }
                 System.out.println("Import success!");
            }
            br.close();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }   
    }

}

将文件内容直接读入sql语句对我来说似乎是个坏主意。但现在添加空检查可以解决这个问题:

        while ((line = br.readLine()) != null) {
          try {
            String[] arr = line.split(",");
            if(arr[0] != null && arr[1] != null) {
               String sql = "INSERT INTO Dzialki " +
                         "(Nr_dzialki, Powierzchnia) " + 
                         "VALUES ('" + arr[0] + "','" + arr[1] + "') ";
               s.execute(sql);
            }
          } catch (SQLException e) {
                // TODO Auto-generated catch block
            e.printStackTrace();
          }
          System.out.println("Import success!");
        }

如果不想插入空值,请检查这些值并忽略空值。您可能只想在一行的所有值都为null时执行此操作。要忽略列名,首先必须知道它们在哪一行。在您的情况下,它似乎是第1行,所以在读取文件时跳过。在其他表格中不太好,因为我有3个单元格,我不会迁移。这是2个单元格。索索-有什么问题?忽略任何不希望导入的单元格/列/行。我们不能告诉你该怎么做,因为只有你知道数据和需求。顺便说一句,你的代码容易受到攻击,因此除非你完全知道数据来自何处并相信源代码,否则可能会发生不好的事情(如删除数据库、删除所有数据等)。实际上,他的解决方案是你的,只需对
arr[0]!=空(&arr[1]!=null,这也是我所说的。他承认这并不完美,但应该让你开始。再次注意,我们不能也不会提供完整的解决方案。这是你的任务和工作,我们在这里帮助你,而不是为你做所有的工作。