Диалект SQL в H2 - PullRequest
       25

Диалект SQL в H2

0 голосов
/ 19 ноября 2011

У меня есть файл, который содержит операторы SQL "вставки".Я открываю этот файл, читаю его и затем пытаюсь вставить его в базу данных (таблица уже есть).Заявления имеют вид:

Insert into table1 Select 1,....
Insert into table1 Select 2,....
Insert into table1 Select 3,....
;

';'после нескольких строк.

Эти операторы нормально работают на реальном сервере DB2, но не работают во H2.Я также пробовал MODE = DB2, но все еще не работает.

Чтобы все заработало, я вставил ';'после каждой строки.Итак, операторы стали:

Insert into table1 select 1,....;
Insert into table1 Select 2,....;
Insert into table1 Select 3,....;
;

Когда я пытаюсь вставить эти операторы в консоль H2, все работает нормально.Но в Java-программе это выдает ошибку из-за двух последовательных символов ';'.

Есть ли какое-либо решение этой проблемы?

1 Ответ

1 голос
/ 19 ноября 2011

Я не совсем уверен, что понимаю, что происходит после вашего "select", так как я привык либо к "values ​​(...)", либо к оператору select, ссылающемуся на другую таблицу, которую обычно можно объединить в одну оператор, использующий что-то вроде ROW_NUMBER () для показанных значений.

Если у вас большой объем вставок, попробуйте использовать метод addBatch () в PreparedStatement. Это быстро, очень безопасно при правильной реализации и оказывает наименьшее влияние на ресурсы вашей базы данных (например, кэш операторов).

con.setAutoCommit(false);
PreparedStatement pstmt = con.prepareStatement("INSERT INTO table1 VALUES (?,?)");
pstmt.setInt(1, 1);
pstmt.setString(2, "example");
pstmt.addBatch();
pstmt.setInt(1, 2);
pstmt.setString(2, "I should really loop through an array here...");
pstmt.addBatch();
int[] updCnt = pstmt.executeBatch();
con.commit();
...