Медленное повторяющееся выполнение операторов DDL и DML с использованием JDBC - PullRequest
1 голос
/ 06 августа 2011

Для интеграционных тестов, работающих с 11 различными RBDMS для библиотеки абстракций базы данных, мне нужно часто сбрасывать схему и / или данные. Это означает, что я запускаю множество операторов для большинства тестовых случаев.

Сброс схемы требуется только в начале набора тестов. Например:

DROP VIEW
DROP TABLE
DROP SEQUENCE
DROP PROCEDURE
...

CREATE TABLE
...

Сброс данных необходим только для тестов, которые записывают данные. Например:

DROP SEQUENCE
DELETE FROM TABLE ...

CREATE SEQUENCE
INSERT INTO TABLE ...

Тесты только для чтения довольно быстрые, так как не требуют сброса. Интуитивно я просто считывал файл SQL в память и выполнял каждое выражение, используя это:

// No bind variables, all hard parses
// Bind variables won't help much, though as the "hard-parse-reduction" isn't very big.
stmt = connection.createStatement();
stmt.execute(sql);

В некоторых системах это довольно медленно. Есть ли лучший способ сделать это с JDBC? Или я должен принять тот факт, что это может быть медленным ...?

1 Ответ

2 голосов
/ 06 августа 2011

Частичная идея: для более быстрого удаления многие СУБД имеют оператор «таблица усечений».

Другая частичная идея: вместо удаления и переустановки всего в начале теста, вы можете просто скопировать файлы пустой базы данных. Это потребует глубоких знаний обо всех 11 СУБД, и вам нужно будет остановить процессы.

...