Java - 如何从txt文件将数据插入数据库

时间:2017-03-17 03:36:40

标签: java mysql jdbc

我想知道如何读取文件并插入到我的数据库中的表中。我写了这个:

String customerFile = "customer.txt";
Connection myConnect = ....
Statement mySt = myConnect.createStatement();
mySt.executeUpdate(..create customer table..);

        int SSN;
        String CNAME;
        String GENDER;
        int AGE;
        String PROFESSION;
        String line;
        String[] tokens;

        FileReader file1 = new FileReader(customerFile);
        BufferedReader buffer1 = new BufferedReader(file1);

        //throw away first line
        line = buffer1.readLine();

        //continue with rest of file
        while((line = buffer1.readLine()) != null)
        {
            tokens = line.split(",");
            SSN = Integer.parseInt(tokens[0]);
            CNAME = tokens[1];
            GENDER = tokens[2];
            AGE = Integer.parseInt(tokens[3]);
            PROFESSION = tokens[4];

            String insertString = "insert into customer values ( " + SSN + ", " + CNAME + "," +
                                    GENDER + ", " + AGE + ", " + PROFESSION +")";
            mySt.executeUpdate(insertString);
        }

我认为这是插入表格的正确方法。但是,我遇到的问题是变量没有以正确的方式被读取。

示例行:

3648993,Emily,male,63,Consulting
5022334,Barbara,male,26,Finance

通过上面的示例,我想要一个包含2行和5列的表,但是我放在顶部的代码在到达名称时给了我一个错误。我不确定问题出在哪里。

3 个答案:

答案 0 :(得分:0)

您应该将insertString替换为

  myConnect = getConnection();
  myConnect.setAutoCommit(false);
  File file = new File(fileName);
  fis = new FileInputStream(file);
  pstmt = myConnect.prepareStatement("insert into customer( " + SSN + ", " + CNAME + "," +
         GENDER + ", " + AGE + ", " + PROFESSION +") values (?,?,?,?,?)");
  pstmt.setString(1, SSN);
  pstmt.setString(2, AGE);
   ....
  pstmt.executeUpdate();
  myConnect.commit();

来源:Insert text file into MySQL

答案 1 :(得分:0)

确保在字符串字段周围加上引号,而不是:

String insertString = "insert into customer values ( " + SSN + ", " + CNAME + "," +
                                GENDER + ", " + AGE + ", " + PROFESSION +")";

做的:

String insertString = "insert into customer values ( " + SSN + ", '" + CNAME + "','" +
                                GENDER + "', " + AGE + ", '" + PROFESSION +"')";

答案 2 :(得分:-1)

通常我会分两步完成这些事情:

1)创建一个只代表文本文件一行的java类。这个类用txt文件中的一行进行实例化,解析了这一行并创建了字段,因此每个字段都有一个getter和一个具有正确字段类型的setter。在这个课程中,如果字段错误甚至是空的话,我可以执行测试和纠正措施。

2)我创建了一个Writer类,它逐行读取文本文件,并将每一行写入数据库,主要从第二行开始,因为第一行包含标题。我严格使用PreparedStatement并使用批处理,最后,当文件循环结束时,使用PreparedStatement.executeBatch()将批处理写入DB,然后关闭所有DB对象。