Pull to refresh

Пример использования базы данных H2 в embended-режиме в Eclipse

Статья предназначено прежде всего для новичков, т.к. и сам я не являюсь программистом по своей специальности, и на Java начал программировать совсем недавно.

Мне захотелось написать одну простую программу, в которой использовалось бы встроенная БД. Немного погуглив я вышел на H2. Об этой БД были хорошие отзывы, и в сравнении производительности у нее были хорошие результаты, поэтому ее и выбрал.

Далее у меня появилась проблема как же ее все-таки использовать. Дальше я снова погуглил, и нашел вот это. Здесь правда для NetBeans, в Eclipse я делал по другому. В первую очередь это касается создания таблиц. Далее опишу что у меня получилось.


1. Скачиваем с сайта установочный файл или zip архив. Устанавливаем и распаковываем.

2. Для того чтоб было проще, я скопировал в отдельную папку h2-*.jar из папки bin и папку javadoc из папки docs.

3. Далее запускаем Eclipse, создаем новый проект, задаем ему имя и нажимаем Next. В следующем окне выбираем Add External JAR’s и там выбираем наш h2-*.jar. Разворачиваем список появившийся и выбираем Javadoc Location нажав кнопку Edit, выбираем папку javadoc. И жмем Finish.
image

4. Создаем package и class которые вам нужны. Далее последует код который поможет вам создать базу, таблицу, заполнить ее значениями и получить их.

import java.sql.*;
import java.sql.Connection;
import java.sql.DriverManager;

public class ConnectH2 {

public static void main(String[] args) {
try {
Class.forName("org.h2.Driver").newInstance();
Connection conn = DriverManager.getConnection("jdbc:h2:test",
"sa", "");
Statement st = null;
st = conn.createStatement();
st.execute("INSERT INTO TEST VALUES(default,'HELLO')");
st.execute("INSERT INTO TEST(NAME) VALUES('JOHN')");
String name1 = "Jack";
String q = "insert into TEST(name) values(?)";
PreparedStatement st1 = null;

st1 = conn.prepareStatement(q);
st1.setString(1, name1);
st1.execute();

ResultSet result;
result = st.executeQuery("SELECT * FROM TEST");
while (result.next()) {
String name = result.getString("NAME");
System.out.println(result.getString("ID")+" "+name);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}


Вот небольшие комментарии по коду.

Обработка ошибки try..catch – я использовал простую обработку Exception, иначе выдавалось бы сообщение об ошибке что не обрабатываются исключения, и просило бы обработать исключения SQLException и еще какие-то, просто Exception упрощает в данном случае написание кода, но не думаю что это слишком правильно и следует все таки более аккуратно обрабатывать исключения.

Class.forName("org.h2.Driver").newInstance();

В этой строчке я не совсем понял для чего используют newInstance(), в примере на сайте H2 без нее обходятся, но в примере для NetBeanse по ссылке выше пишется вот так. Вроде бы, как я понял помогает избежать каких то исключений.

Connection conn = DriverManager.getConnection("jdbc:h2:test","sa", "");

Первое здесь это путь к файлу с БД. Если написать так, то он создаться в корне с программой (jar файлом, а в случае запуска из Eclipse — в корне проекта), так же можно задать путь в какую-нибудь папку, относительный путь и т.п. Далее идет имя администратора и пароль. Так как я создаю встроенную базу данных, то не стал пока разбираться с пользователями и т.п. После этого должен создаться файл test.h2.db. Так же этот файл можно зашифровать сразу же. В файле H2.pdf есть раздел «Connecting to an Encrypted Database» и там есть пример кода. Так же еще хотелось бы сказать что путь к базе, логин и т.д. имеет смысл вынести в отдельные константы, в данном случае я опять же упростил написание просто.

Назначение переменных Statement и PreparedStatment для меня выглядит одинаковым, просто в случае с PreparedStatment позволяет нам создавать запросы в БД с использованием переменных.
Обратите внимание на:
st1.setString(1, name1);

Здесь идет преобразование переменной к необходимому типу, есть еще setInt и т.д. Здесь 1 — это номер знака вопроса в запросе.

insert into TEST(name) values(?)

Так же существует несколько способов выполнить запрос – execute, executeQuery и executeUpdate, так что стоит про них почитать в javadoc на H2 может вам это и пригодится, мне пока что не нужно было.

Ну и последнее — переменная ResultSet result – судя по описание в ней довольно много чего можно выполнить, мне она пригодилась только для одного вывода из базы данных. Знать надо вот что, result.next() надо сделать в первую очередь, до того как вытаскивать результаты, иначе будет ошибка, изначально переменная result ссылается на строку -1 (если так можно выразиться), а там ничего нет.

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

Так же в реальной программе я это все разделю на отдельные нужные мне функции, и так же не забываем о том что надо еще отсоединиться от базы и закрыть ее: st.close(); и conn.close(); Например это стоит делать в блоке finally после обработки ошибки. Я этого в данном случае не делал.

Как запустить java программу без Eclipse?

Выбираем File-Export, там уже выбираем Java-Runable JAR File, затем Next.
Launch Configuration – выбираем наш проект. Задаем имя выходного файла и его расположение.
Выбираем library handling.
Как я понял первый вариант копируем только необходимый ему код, второй вариант упаковывает все целиком (в нашем случае h2-*.jar), третий вариант – создает поддиректорию, в которой будет располагаться h2-*.jar.
Если вы пишете только для себя то тут думаю неважно какой вариант вы выберите, но если хотите распространять, то по-моему лучше всего третий вариант, или второй, про первый вариант сам Eclipse выдает предупреждение что могут быть проблемы с лицензией. Лицензия на H2 вот тут.

Создали jar файл, теперь нужно его запустить, пишем в консоли:
java –jar test.jar
где test.jar – имя вашего файла.

После установке в Windows, появляются еще ссылки на H2 Console в меню «Пуск». Запускаем одну из них, и должен открыться браузер с формой в которой если вы укажите путь до вашей базы, логин, пароль и т.д. то сможете выполнить какие-либо запросы к вашей базе.

В примерах по H2 есть примеры подключения через браузер к базе, там что то пишется в файл web.xml, но как понимаю это не для простого java приложения. Так что способ описанный мной, может пригодиться.

На этом всё.

Используемые источники:
1. www.h2database.com/html/main.html
2. www.feras-odeh.com/java/h2_embeded_database_java
3. www.h2database.com/html/license.html
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.
Change theme settings