Здесь есть несколько неправильных вещей.
H2 имеет различные режимы подключения. В вашем примере вы конфигурируете DataSourceFactory
для в памяти соединение, но затем в методе @Before
вы создаете новый экземпляр H2 с tcp на основе соединения. Подробнее о режимах подключения здесь .
Так что теперь у вас есть в основном 2 экземпляра H2 , в памяти и tcp, и они совершенно не связаны. Поэтому вам, вероятно, нужно настроить только один тип подключения для ваших тестов.
Если вы хотите подключиться к H2 дБ за пределами JVM (например, из браузера) - тогда вам необходимо установить соединение на основе tcp.
Чтобы иметь возможность подключиться к БД из браузера, вам также необходимо запустить консольное приложение. Который должен быть внутри h2.jar
с такой командой java -jar h2*.jar
. Подробнее об этом здесь .
И, наконец, вам подходит этот код (с подключением к памяти):
private static final String DBNAME = String.format("JDBITest-%d", System.currentTimeMillis());
private ManagedDataSource dataSource;
@Before
public void setUp() {
System.out.println("Server started and connection is open.");
final String url = String.format("jdbc:h2:mem:%s;", DBNAME) +
"MODE=MySQL;" +
"TRACE_LEVEL_FILE=3;" +
"DB_CLOSE_DELAY=-1;" +
"IGNORECASE=TRUE";
System.out.println("Creating in memory H2 using " + url);
DataSourceFactory config = new DataSourceFactory();
BootstrapLogging.bootstrap();
config.setUrl(url);
config.setUser("sa");
config.setDriverClass("org.h2.Driver");
config.setValidationQuery("SELECT 1");
dataSource = config.build(null, "test");
}
@Test
public void test() throws SQLException {
Connection connection = dataSource.getConnection();
connection.createStatement().executeUpdate("CREATE TABLE TEST (`id` INT)");
connection.createStatement().executeUpdate("INSERT INTO TEST (`id`) VALUES (1)");
ResultSet resultSet1 = connection.createStatement().executeQuery("SELECT * FROM TEST WHERE `id` = 1");
resultSet1.next();
resultSet1.getInt(1);
System.out.println("Found ID: " + resultSet1.getInt(1));
}
Из:
Server started and connection is open.
Creating in memory H2 using jdbc:h2:mem:JDBITest-1541649996267;MODE=MySQL;TRACE_LEVEL_FILE=3;DB_CLOSE_DELAY=-1;IGNORECASE=TRUE
Found ID: 1