【问题标题】:What I should improve in my code to migrate data from csv file to database我应该在我的代码中改进什么以将数据从 csv 文件迁移到数据库
【发布时间】:2018-01-25 15:21:33
【问题描述】:

我有一个 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();
        }   
    }

}

【问题讨论】:

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

标签: java database postgresql csv


【解决方案1】:

将文件内容直接读入 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!");
        }

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2018-04-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-12
    • 2014-04-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多