Вставка массива символов в БД - PullRequest
3 голосов
/ 15 февраля 2012

Я хочу вставить двумерный массив в таблицу БД.Есть ли способ вставить эти значения в БД с помощью одного оператора INSERT, а не с помощью нескольких операторов 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 ]

5 голосов
/ 15 февраля 2012

Использовать JDBC Пакетные обновления ?Использование подготовленных заявлений также должно помочь.

Пример

    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 голос
/ 15 февраля 2012

С 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...