如何在Java中将CSV中的值插入到数据库中

5
我已经尝试了以下代码来拆分csv值,现在如何将其插入到数据库中?我需要保存值到单独的变量以匹配列名吗?我无法弄清楚。
注意:我现在不想使用任何csv解析器。我只想手动完成。
public static void main(String[] args) throws IOException, ClassNotFoundException, SQLException {
        String name;
        String email;
        String phone;
        String ID;

        Connection con = OracleDBConnection.getConnection();
        String query = "Insert into NEWSTUDENT values(?,?,?,?)";
                PreparedStatement st = con.prepareStatement();
                st.executeUpdate(query);        

        try {
            BufferedReader bReader = new BufferedReader(new FileReader("1000rows.csv"));

            while (bReader != null) {
                String read;
                try {
                    read = bReader.readLine();
                    if (read != null) 
                    {
                        String[] array = read.split(",+");
                        for(String result:array)
                        {
                            System.out.println(result);
                        }
                    } 
                } catch (IOException ex) {
                    ex.printStackTrace();
                }
                finally
                {
                   if (bReader == null) 
                    {
                        bReader.close();
                    }
                }
            }
        } catch (FileNotFoundException ex) {
            ex.printStackTrace();
        }
    }
}

输出:

1Kiriti
kiriti@gmail.com
880789939

数据库中的列名:

Name Email Phone ID

使用 PreparedStatement - agad
为什么不用解析器?这是一份作业吗?如果不是,请使用解析器。自己编写会在后面遇到错误。 - Ondra Žižka
3个回答

8

使用预处理语句,在while循环中构建查询并执行。有关预处理语句的更多信息,请查看此链接

String sql = " INSERT INTO TABLE_(name,email,phone,id) VALUES(?,?,?,?) ";


try { 
        BufferedReader bReader = new BufferedReader(new FileReader("1000rows.csv"));
        String line = ""; 
        while ((line = bReader.readLine()) != null) {
            try {

                if (line != null) 
                {
                    String[] array = line.split(",+");
                    for(String result:array)
                    {
                        System.out.println(result);
 //Create preparedStatement here and set them and excute them
                PreparedStatement ps = yourConnecionObject.createPreparedStatement(sql);
                 ps.setString(1,str[0]);
                 ps.setString(2,str[1]);
                 ps.setString(3,str[2]);
                 ps.setString(4,strp[3])
                 ps.excuteUpdate();
                 ps. close()
   //Assuming that your line from file after split will folllow that sequence

                    }
                } 
            } catch (IOException ex) {
                ex.printStackTrace();
            }
            finally
            {
               if (bReader == null) 
                {
                    bReader.close();
                }
            }
        }
    } catch (FileNotFoundException ex) {
        ex.printStackTrace();
    }

我的问题是如何在循环中输入并将列与数组中的值匹配。 - kittu

8
您可以使用“预处理语句(Prepare Statement)”并在每次迭代中设置参数的值:
Connection con = OracleDBConnection.getConnection();
String query = "Insert into NEWSTUDENT values(?,?,?,?)";
PreparedStatement ps=con.prepareStatement(query);
ps.setString(1,array[0]);
ps.setString(2,array[1]); // and so on
ps.executeUpdate();

如果行数较多,您还可以使用批处理功能:
String sql = "Insert into NEWSTUDENT values(?,?,?)";


PreparedStatement preparedStatement = null;
try{
    preparedStatement =
            connection.prepareStatement(sql);

    preparedStatement.setString(1, "Gary");
    preparedStatement.setString(2, "Larson");
    preparedStatement.setString (3, "Test");

    preparedStatement.addBatch();

    preparedStatement.setString(1, "Stan");
    preparedStatement.setString(2, "Lee");
    preparedStatement.setString (3, 456);

    preparedStatement.addBatch();

    int[] affectedRecords = preparedStatement.executeBatch();

}finally {
    if(preparedStatement != null) {
        preparedStatement.close();
    }
}

我大约有1000行。 - kittu
然后你可以使用批处理! - Neeraj Jain

2
您可以将数据存储在数组中,并将它们绑定到您的语句中:
 String query = "Insert into NEWSTUDENT values(?,?,?,?)";

 PreparedStatement st = con.prepareStatement(query);
 st.setString(1,array [0]);
 st.setString(2,array[1]);
 ....
 st.executeUpdate();        

关于预处理语句的更多信息,请参阅Oracle文档


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接