将字符数组插入DB

时间:2012-02-14 20:08:03

标签: java jdbc

我想在数据库表中插入一个二维数组。是否有任何方法可以使用单个INSERT语句将这些值插入到DB中,而不是使用多个INSERT语句?这些多个语句会产生数据库连接池问题,并可能在应用程序中产生延迟。

String[][] a = new String[10][2];
for(int i =0;i<10;i++)
{
        st.executeUpdate("Insert into sap_details  VALUES a[i][0],a[i][1]);
}

这里发生的是每行有效调用10个INSERT语句。我不想要它;它应该只发生一个INSERT语句。

有没有办法做到这一点?

2 个答案:

答案 0 :(得分:5)

使用JDBC Batch Updates?使用准备好的陈述也应该有帮助。

实施例

    String[][] a = new String[10][2];
    PreparedStatement pst = con.prepareStatement("INSERT INTO sap_details VALUES (?,?)");
    for (int i = 0; i < 10; i++) {
        pst.setString(1, a[i][0]);
        pst.setString(2, a[i][1]);
        pst.addBatch();
    }
    int[] results = pst.executeBatch();

答案 1 :(得分:1)

使用MySQL,这样的事情应该可以解决问题,完全没问题,Oracle不会喜欢它。 DB2,SQL Server(自10.0版本 - 即2008),PostgreSQL(自8.2版本),MySQL和H2支持此功能。

        String[][] a = new String[10][2];    
        StringBuilder sb = new StringBuilder("Insert into sap_details (a,b) VALUES ");               
        for(int i =0;i<a.length;i++){
                sb.append("(\'");
                sb.append(a[i][0]);
                sb.append("\',\'");
                sb.append(a[i][1]);
                sb.append("\')");
                if(i < a.length -1 )
                    sb.append(",");
         }
         st.executeUpdate(sb.toString());