powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / h2 database как база для создания тестов
15 сообщений из 15, страница 1 из 1
h2 database как база для создания тестов
    #38890329
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Добрый день !

Есть идея : использовать h2 database как базу для тестирования pl sql процедур .

конкретно - есть куча процедур - с кучей бизнес логики под oracle и mysql их нужно как то тестировать .

Вижу такой путь пишется приложение с кучей junit тестов .

Тест представляет из себя :

создание базы в памяти , загрузку требуемых скприптов для создания таблиц и загрузку в базу процедур .

вопрос : поддерживает ли h2 database хранимые процедуры в стиле Mysql/ oracle ?

как их туда грузить ?


в примерах только код на java ?!

http://h2database.googlecode.com/svn/trunk/h2/src/test/org/h2/samples/Function.java


сами тесты .

Псевдокод такой :

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.nio.file.FileSystems;
import java.nio.file.Files;
import java.nio.file.Path;
import java.sql.CallableStatement;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.h2.tools.RunScript;
import org.junit.After;
import org.junit.AfterClass;
import static org.junit.Assert.assertEquals;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;

public class KeyTest {

    private static Connection conn;

    @BeforeClass
    public static void setUpClass() throws ClassNotFoundException, SQLException {
        Class.forName("org.h2.Driver");
        conn = DriverManager.getConnection("jdbc:h2:mem:db_test;MODE=MYSQL");
       // тут создание базы и загрузка всех процедур , инициализация данными 
       // создание Snapshot  базы для быстрого восстановления перед каждым тестом 
    }

    @AfterClass
    public static void tearDownClass() {
    }

    @Before
    public void setUp() throws SQLException, IOException {
   // тут берем Snapshot и восстанавливаем начальное состояние 
    }

    @After
    public void tearDown() {
    }

    @Test
    public void load() throws SQLException, IOException {
   // потом перенести все это в setUpClass
        

        Path path = FileSystems.getDefault().getPath("~/resources/db_test/");

        Files.list(path).forEachOrdered((Path x) -> {
            try {
                RunScript.execute(conn, new FileReader(x.toFile()));
            } catch (SQLException | FileNotFoundException ex) {
                Logger.getLogger(TrnKeyTest.class.getName()).log(Level.SEVERE, null, ex);
            }
        });

    }

    @Test
    public void nextIdBy() throws SQLException {
        long userId = 200001L;
        CallableStatement cs = conn.prepareCall("CALL PR_GET_KEY(?)");
        cs.setLong(1, userId);
        cs.execute();
        ResultSet rs = cs.getResultSet();
        long next = -1L;
        while (rs.next()) {
            next = rs.getLong(1);
        }
        assertEquals(next, 1L);
    }

}



~/resources/db_test/init.sql

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
CREATE TABLE IF NOT EXISTS T_KEYS (
  id BIGINT(20) NOT NULL AUTO_INCREMENT,
  id_user INT(11) NOT NULL,
  seq DECIMAL(19,2) NULL DEFAULT NULL,
  PRIMARY KEY (id),
  UNIQUE INDEX id_user (id_user ASC))



 CREATE PROCEDURE PR_GET_KEY (in user_id integer unsigned)
 BEGIN
--   select 1;
 END




тест красный ибо процедура не грузиться в базу .
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38890521
WGA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
WGA
Гость
Atum1,

H2 не поддерживает хранимые процедуры Oracle.
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38890546
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
WGA,

как я понял ни оракла ни mysql /
вообще ни каких не поддерживает , только код на java .
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38890560
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Затея изначально была провальной. PL/SQL вообще не воспроизводится ни в каких
альтренативных SQL-машинах. Это чисто Оракловая разработка и только DBMS
семейства Oracle дадут возможность использовать ее для тестирования.

Тоже самое вобщем-то можно сказать про Transact-SQL от MS.
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38890567
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Если база новая, я бы отказался от процедур. Разве что для аналитики, когда обрабатываются большие массивы данных.
Размывание бизнес-логики по коду (часть в java, часть в pl sql), большие вопросы с версионностью - а оно надо? Даже отладить - уже вопросы возникают.
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38890592
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
PLSQL прекрасно делает свои задачи на которые он был расчитан. И Java не является
ему альтернативой по архитектурным причинам.

Просто надо признать как факт что сегмент разработки Java увеличился стократно
за десятилетие. А количество PL кодеров вобщем-то осталось старое.
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38890760
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
maytonЗатея изначально была провальной. PL/SQL вообще не воспроизводится ни в каких
альтренативных SQL-машинах. Это чисто Оракловая разработка и только DBMS
семейства Oracle дадут возможность использовать ее для тестирования.

Тоже самое вобщем-то можно сказать про Transact-SQL от MS.

а как же mysql ?

ну можно и не в памяти - можно и в родном mysql создавать , так же по такому принципу -

создать базу - на залить в нее таблицы и процедурки - сделать Snapshot

гонять вызов процедур в тесте .
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38892173
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вообще идея гонять все тесты на базе, которая не будет работать в production - изначально порочна, т. к. 100% совместимости нет нигде (самый простой пример - диапазоны типов), и выбрав H2, вы себя добровольно ограничиваете урезанным подмножеством стандарта SQL-92.
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38892401
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Локшин МаркВообще идея гонять все тесты на базе, которая не будет работать в production - изначально порочна, т. к. 100% совместимости нет нигде (самый простой пример - диапазоны типов), и выбрав H2, вы себя добровольно ограничиваете урезанным подмножеством стандарта SQL-92.

ну можно и на mysql/oracle гонять - и делать каждый раз Snapshot.
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38892490
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Я уже 10 лет не вижу никакого смысла следовать стандартам Ansi-SQL-*. Никогда это не приносило
никакой выгоды. Все разговоры о совместимости умирали вместе с первыми задачами разработки
storage procedures. C проприетарными data-types. С первыми попытками анализа планов выполнения
и решения проблем performance improovement.

Куплена лицензия на Ораклы? - Поставьте себе локально OracleXE. Погоняйте там тесты. Потом - в продуктив.

Забудьте навсегда это порочное слово Ansi SQL! Его нету!
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38892592
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
maytonЗабудьте навсегда это порочное слово Ansi SQL! Его нету!
Обратите внимание: у автора поста уже в наличии 2 несовместимых сервера, и бизнес-логика (не аналитика!) в сохраненных процедурах. Оправдать это можно только legacy-кодом. Если это новая разработка, то, конечно, хозяин барин, но на первый взгляд, довольно сомнительное решение
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38892725
Atum1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanramaytonЗабудьте навсегда это порочное слово Ansi SQL! Его нету!
Обратите внимание: у автора поста уже в наличии 2 несовместимых сервера, и бизнес-логика (не аналитика!) в сохраненных процедурах. Оправдать это можно только legacy-кодом. Если это новая разработка, то, конечно, хозяин барин, но на первый взгляд, довольно сомнительное решение

Да вы правы - задачи интеграции(обмен данными) из одной базы в другую.
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38893168
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1ну можно и на mysql/oracle гонять - и делать каждый раз Snapshot.
Запустили пакет тестов. Создали базу тем или иным способом. Вставили 20 строчек в одном тесте. Что-то проверили. Почистили базу. Вставили 15 строчек в другом тесте. Проверили еще что-то... и т.д. Удалили базу.
Зачем упражнения с H2?
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38893171
Локшин Марк
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Если у вас база используется как тупое хранилище данных типа dbf, а сверху все накрыто каким-нибудь ОРМ типа Hibernate'а, то возможно и есть смысл использовать H2 для ускорения тестов. В Вашем же случае
Atum1 есть куча процедур - с кучей бизнес логики под oracle и mysql
использование H2 - крайне сомнительное занятие.
...
Рейтинг: 0 / 0
h2 database как база для создания тестов
    #38893235
eJack
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Atum1ivanraпропущено...

Обратите внимание: у автора поста уже в наличии 2 несовместимых сервера, и бизнес-логика (не аналитика!) в сохраненных процедурах. Оправдать это можно только legacy-кодом. Если это новая разработка, то, конечно, хозяин барин, но на первый взгляд, довольно сомнительное решение

Да вы правы - задачи интеграции(обмен данными) из одной базы в другую.

Задачи интеграции лучше решать не на уровне SP.
Если нет требования к on-line интеграции - то лучше обмен данными через файлы.
Если есть я бы пошел по пути JMS и прочих MQ
...
Рейтинг: 0 / 0
15 сообщений из 15, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / h2 database как база для создания тестов
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]