Где Встроенная База Данных H2 Хранит Эти Данные?
Узнайте, как настроить расположение файлов базы данных H2.
1. введение
В этой статье мы узнаем, как настроить приложение Spring Boot для использования встроенной базы данных H2 , а затем посмотрим, где встроенная база данных H2 хранит эти данные.
База данных H2-это легкая база данных с открытым исходным кодом, не имеющая на данный момент коммерческой поддержки. Мы можем использовать его в различных режимах:
- режим сервера – для удаленных подключений с использованием JDBC или ODBC через TCP/IP
- встроенный режим – для локальных соединений, использующих JDBC
- смешанный режим – это означает, что мы можем использовать H2 как для локальных, так и для удаленных соединений
H2 может быть сконфигурирован для работы в качестве базы данных in-memory , но он также может быть постоянным, например, его данные будут храниться на диске. Для целей этого урока мы будем работать с базой данных H2 во встроенном режиме с включенной персистентностью, поэтому у нас будут данные на диске .
Как заголовок страницы и теги h2 влияют на продвижение?
2. Встроенная база данных H2
Если мы хотим использовать базу данных H2, нам нужно добавить зависимости h2 и spring-boot-starter-data-jpa Maven в ваш pom.xml файл:
com.h2database h2 1.4.200 runtime org.springframework.boot spring-boot-starter-data-jpa 2.3.4.RELEASE
3. Встроенный режим Персистентности H2
Мы уже упоминали, что H2 может использовать файловую систему для хранения данных базы данных. Самое большое преимущество этого подхода по сравнению с подходом в памяти заключается в том, что данные базы данных не теряются после перезапуска приложения.
Мы можем настроить режим хранения через свойство spring.datasource.url в нашем файле application.properties . Таким образом, мы можем настроить базу данных H2 на использование подхода in-memory, добавив параметр mem в URL-адрес источника данных, а затем имя базы данных:
Если мы используем режим сохранения на основе файлов, мы установим один из доступных вариантов расположения дисков вместо параметра mem . В следующем разделе мы обсудим, что это за варианты.
Давайте посмотрим, какие файлы создает база данных H2:
- demodb.mv.db – в отличие от других, этот файл всегда создается и содержит данные, журнал транзакций и индексы
- demodb.lock.db – это файл блокировки базы данных, и H2 воссоздает его, когда база данных используется
- demodb.trace.db – этот файл содержит информацию о трассировке
- demodb.123.temp.db – используется для обработки больших двоичных объектов или огромных результирующих наборов
- demodb.newFile – H2 использует этот файл для сжатия базы данных и содержит новый файл хранилища базы данных
- demodb.oldFile – H2 также использует этот файл для сжатия базы данных и содержит старый файл хранилища баз данных
4. Встроенное Хранилище Базы Данных H2
H2 очень гибок в отношении хранения файлов базы данных. В данный момент мы можем настроить его каталог хранения так, чтобы:
Создание и работа с базой данных H2 в Intelegi Idea в Mac OS
- каталог на диске
- текущий каталог пользователя
- текущий каталог проекта или рабочий каталог
4.1. Каталог на диске
Мы можем установить конкретное местоположение каталога, в котором будут храниться наши файлы базы данных:
spring.datasource.url=jdbc:h2:file:C:/data/demodb
Обратите внимание, что в этой строке подключения последний фрагмент ссылается на имя базы данных . Кроме того, даже если мы пропустим ключевое слово file в этом URL-адресе подключения к источнику данных, H2 будет управлять им и создавать файлы в указанном месте.
4.2. Текущий Каталог Пользователя
Если мы хотим сохранить файлы базы данных в текущем каталоге пользователя, мы будем использовать URL-адрес источника данных, содержащий тильду (~) после ключевого слова file :
spring.datasource.url=jdbc:h2:file:~/demodb
Например, в системах Windows этот каталог будет C:/Users/ .
Для хранения файлов базы данных в подкаталоге текущего каталога пользователя:
spring.datasource.url=jdbc:h2:file:~/subdirectory/demodb
Обратите внимание, что если подкаталог не существует, он будет создан автоматически .
4.3. Текущий Рабочий Каталог
Текущий рабочий каталог-это тот, в котором запущено приложение, и на него ссылаются как на точку (.) в URL-адресе источника данных. Если нам нужны файлы базы данных, мы настроим ее следующим образом:
spring.datasource.url=jdbc:h2:file:./demodb
Для хранения файлов базы данных в подкаталоге текущего рабочего каталога:
spring.datasource.url=jdbc:h2:file:./subdirectory/demodb
Обратите внимание, что если подкаталог не существует, он будет создан автоматически.
5. Заключение
В этом коротком уроке мы обсудили некоторые аспекты базы данных H2 и показали, где встроенная база данных H2 хранит эти данные. Мы также узнали, как настроить расположение файлов базы данных.
Полный образец кода доступен на GitHub .
- Метки database, directory, location
Источник: javascopes.com
Эволюция H2 — оконные функции, CTE, JSON/XML во встраиваемой базе данных
Есть open source проекты которые стали коммерчески успешным мейнстримом, как например PostgreSQL/Elasticsearch. Другие, к примеру RethinkDB, проиграли на рынке и остановили разработку. А проект H2 database встраиваемой базы данных, написанной на языке java, развивается и здравствует в своей нише.
Для демонстрации функционала SonarQube, Jira, Confluence при первом запуске используют H2 database. H2 является базой для запуска SQL тестов в памяти, почти в любом JVM проекте. Есть пример применения менее известный пользователям — это использование H2 в распределенном ignite-sql и это уже production ready сценарий использования встраиваемой базы данных как части другого решения. Меньше месяца назад вышла версия 1.4.199 в которой теперь можно писать достаточно сложные SQL запросы.
В проектах я никогда не полагался на H2, как на полноценную базу данных с сохранением данных на диск. Скорее, как модуль трансформации данных в памяти JVM, с неплохой поддержкой SQL. Но для этого применения его сильно ограничивало отсутствие оконных функций. И вот спустя более чем пол года с начала разработки функционала, теперь H2database догнал SQLite.
И в этом огромная заслуга Евгения Рязанова из Иркутска — таких темпов разработки как у него, раньше не видел в некоммерческих open source проектах. Также в репозитарии проекта регулярно появляется комиты других рускоговорящих контрибьюторов. А в моменты релиза — основателя проекта Thomas Mueller.
В H2 есть поддержка рекурсивных запросов (CTE). Это стандартный в SQL способ работы с иерархическими данными в таблицах и декомпозиции запросов(тут можно наступить на грабли планировщика). Про рекурсивные запросы доступно рассказано в публикации с примерами.
Для работы со слабо структурированными данными в будущей версии появится реализация SQL/JSON стандарта. А пока для своих нужд расширил H2 с помощью пользовательской функции XQuery 3.1 процессором, на основе BaseX. Код доступен в github проекте H2XQueryAdapter. Это табличная функция, которая из XML или JSON формата с помощью XQuery может извлекать данные и проверять для возвращаемых функцией значений тип и ограничение not null. Дальше доступна вся мощь SQL выражений для трансформации результата XQuery преобразования в памяти JVM процесса.
Табличная функция xquery() перегружена и имеет два варианта — с одним параметром xQuery запрос и вариант с xQuery запросом и вторым — строкой sql запроса для формирования параметров для самого xQuery.
Подход с подобными трансформациями отлично показал себя в проекте по обработке петабайтного объема «сырых» данных в проекте хранилища биомедицинских данных.
create table xresult (GR VARCHAR(500) not null,AR varchar, VER VARCHAR(50)) as select * from xquery(‘declare variable $getHeader as xs:boolean external := false(); declare variable $getData as xs:boolean external := true(); < if($getHeader) then( VARCHAR(500) not nullvarcharVARCHAR(50) ), if($getData) then(( for $row in doc(«http://central.maven.org/maven2/org/springframework/spring-context/5.1.4.RELEASE/spring-context-5.1.4.RELEASE.pom»)//*:dependency return )) > ‘)
У данной реализации есть ограничения на формат xquery запроса.
- Во первых, необходимо объявить две внешних переменных getHeader и getData — это нужно чтобы табличная функция не вызывала несколько раз трансформацию данных, отбрасывая ненужные результаты, чтобы получить лишь названия и тип колонок. Множественный вызов функции — это особенности работы H2 базы с java функциями возвращающими список значений.
- Во вторых, формат результата должен быть как для csv сериализации
<колонка1>тип данных. <колонкаN>тип данных <колонка1>значение. <колонкаN>значение
Можете запустить этот пример в режиме java отладки. Новые правила трансформации можно разрабатывать в привычном вам xquery редакторе или в open source BaseX GUI.
Есть возможность превращать практически любую java коллекцию или POJO в виртуальную таблицу H2. Код проекта H2POJOTable на github. В примере по ссылке платформенный MemoryManagerMXBeans превращается в табличную функцию H2. Возможно, подход станет небольшим утешением тем, кто грустит по отсутствию LINQ и поддержки операций над множествами в Java.
Иногда старый функционал в H2 ломается и не столь востребован пользователями. Как пример, в моих рабочих проектах программы читают данные из AWS S3 URL. Поэтому я надеюсь, известную ошибку все же починят, приняв мой pull request. На пути к исправлению этой ошибки стоят нестабильные тесты для TLS, которые к тому же не работают под Java 11.
H2 позволяет использовать ODBC драйвер PostgreSQL эмулируя подмножество его сетевого протокола. Что так же теоретически позволяет связывать его через FDW в PostgreSQL.
Кроме самой базы данных в поставку H2 также входит минималистская web консоль с поддержкой автодополнения при редактировании, сервлетом или standalone вариантом запуска. H2 выглядит как «швейцарский нож» для разработчиков — компактный и универсальный инструмент, если ваш проект уже использует JVM. При попытке использовать эту консоль с «кривым» jdbc драйвером СУБД Redshift сделал свой первый красноглазый pull request в проект. Noel Grandin, один из участников проекта, помог мне с code review и принял исправления.
Если нужен аналог Berkeley DB Java Edition — в проекте есть MVStore — персистентное хранилище для данных ключ-значение и по совместительству MVCC «движок» по-умолчанию в последних версиях базы данных. Поражает что в БД есть даже базовая поддержка геофункций и полнотекстового поиска.
Cпасибо контрибьюторам H2database, всем использует эту базу и сообщает об ошибках! H2 database с 2005 года развивается, а теперь поддерживает оконные функции, рекурсивные запросы, является одним из наиболее мощных SQL «движков» для обработки данных в памяти JVM и расширяется табличными функциями для работы со слабо структурированными данными.
Источник: habr.com
Русские Блоги
H2 — это встроенный механизм базы данных с открытым исходным кодом, написанный на языке java, не ограниченный платформой, а H2 предоставляет очень удобную веб-консоль для работы и управления содержимым базы данных.
H2 также предоставляет режим совместимости, который может быть совместим с некоторыми основными базами данных, поэтому очень удобно использовать H2 в качестве базы данных в период разработки.
Официальный адрес сайта: http://www.h2database.com/
H2 — это база данных Java SQL. Основные особенности H2:
H2 использование
Наибольшее применение H2 заключается в том, что его можно упаковать и выпустить вместе с приложением, так что небольшой объем структурированных данных можно очень удобно хранить.
Другое его использование — для модульного тестирования. Скорость запуска высока, и функцию сохранения можно отключить.После выполнения каждого варианта использования он будет возвращен в исходное состояние.
Третье использование H2 в качестве кеша, как дополнение к NoSQL. Когда модель данных должна быть реляционной в некоторых сценариях, ее можно использовать как Memcached в качестве буферного уровня серверной части MySQL / Oracle для кэширования данных, которые не часто меняются, но требуют частого доступа, например таблиц словаря и таблиц разрешений. Но эта системная архитектура будет более сложной.
Режим работы H2
H2 поддерживает три различных режима работы, чтобы соответствовать большему количеству различных сценариев применения.
1. Встроенный режим
Во встроенном режиме H2 и приложение запускаются в одной JVM, а H2 запускается приложением. Этот режим также является наиболее эффективным и официально рекомендованным.
Недостатком является то, что базу данных можно открыть только на виртуальной машине (и в загрузчике классов) в любое время. Как и во всех режимах, поддерживаются как постоянные базы данных, так и базы данных в памяти. Нет ограничений на количество одновременно открытых баз данных или количество открытых соединений.
Во встроенном режиме операции ввода-вывода могут выполняться потоками приложений, которые выполняют команды SQL. Приложение не может прерывать эти потоки, это может вызвать повреждение базы данных, потому что JVM закрывает дескриптор ввода-вывода во время прерывания потока. Рассмотрим другие методы контроля выполнения приложения. Когда может произойти перерыв, вы можете async: Файловая система используется в качестве решения, но полная безопасность не может быть гарантирована. Рекомендуем использоватьКлиент-сервер Модель, клиент может прервать собственный поток.
Встроенный режим: локальное соединение с использованием JDBC
База данных постоянно хранится в виде одного файла.
jdbc:h2:file:~/.h2/DBName;AUTO_SERVER=TRUE
~/.h2/DBName Указывает место хранения файла базы данных.При первом подключении данные будут автоматически созданы.
2. Серверный режим
Серверный режим, также известный какУдаленный режим ИлиКлиент / сервер Режим, использование приложения JDBC Или ODBC API Удаленно ( TCP/IP Transfer) для доступа к базе данных. Аналогичен традиционным базам данных mysql и oracle.
Фактически, сам H2 Server также использует встроенный режим для запуска и запуска базы данных H2. Поскольку режим сервера — через удаленный ( TCP/IP Передача) данные доступа к соединению, его производительность ниже, чем в встроенном режиме.
Нет ограничений на количество одновременно открытых баз данных или открытых соединений на сервере.
Режим сервера: через JDBC или ODBC TCP/IP Установить удаленное соединение
H2 поддерживает три сервисных режима:
- веб-сервер: этот режим работы поддерживает доступ браузера к консоли H2.
- TCP-сервер: поддержка соединения клиент / сервер
- Сервер PG: поддерживает клиент PostgreSQL
Пример строки подключения для запуска службы tcp:
jdbc:h2:tcp://localhost/~/test Использовать домашний каталог пользователя
jdbc:h2:tcp://localhost//data/test Использовать абсолютный путь
3. Смешанный режим
Этот режим представляет собой сочетание встроенного режима и гибридного режима. Одно приложение запускает базу данных H2 во встроенном режиме, а другие приложения могут использовать ее в качестве режима сервера для удаленного доступа.
Смешанный режим: одновременное локальное и удаленное подключение
Параметры строки подключения
- DB_CLOSE_DELAY : Не закрывать базу данных после разрыва последнего соединения
- MODE=MySQL : Режим совместимости, H2 совместим с несколькими базами данных, значение может быть: DB2, Derby, HSQLDB, MSSQLServer, MySQL, Oracle, PostgreSQL
- AUTO_SERVER=TRUE : Запуск режима автоматического микширования, позволяющий открывать несколько соединений, этот параметр не поддерживает режим работы в памяти
- AUTO_RECONNECT=TRUE : Автоматически переподключаться после потери связи
- TRACE_LEVEL_SYSTEM_OUT 、 TRACE_LEVEL_FILE : Вывод журнала трассировки в консоль или файл, значение 0 — ВЫКЛ., 1 — ОШИБКА (значение по умолчанию), 2 — ИНФОРМАЦИЯ, 3 — ОТЛАДКА
- SET TRACE_MAX_FILE_SIZE mb : Установите размер файла журнала трассировки, по умолчанию — 16M
Метод подключения к базе данных URL
Встроенное (локальное) соединение | jdbc:h2:[file:][] jdbc:h2:~/test jdbc:h2:file:/data/sample jdbc:h2:file:C:/data/sample (Windows only) |
В памяти (личное) | jdbc:h2:mem: |
В памяти (по имени) | jdbc:h2:mem: jdbc:h2:mem:test_mem |
Серверный режим с использованием TCP / IP (Удаленное подключение) |
jdbc:h2:tcp://[:]/[] jdbc:h2:tcp://localhost/~/test jdbc:h2:tcp://dbserv:8084/~/sample jdbc:h2:tcp://localhost/mem:test |
Серверный режим с использованием TLS (Удаленное подключение) |
jdbc:h2:ssl://[:]/[] jdbc:h2:ssl://localhost:8085/~/sample; |
Использовать зашифрованные файлы | jdbc:h2:;CIPHER=AES jdbc:h2:ssl://localhost/~/test;CIPHER=AES jdbc:h2:file:~/secure;CIPHER=AES |
Метод блокировки файлов | jdbc:h2:;FILE_LOCK= jdbc:h2:file:~/private;CIPHER=AES;FILE_LOCK=SOCKET |
Открывать, только если он уже существует | jdbc:h2:;IFEXISTS=TRUE jdbc:h2:file:~/sample;IFEXISTS=TRUE |
Не закрывайте базу данных при выходе из виртуальной машины | jdbc:h2:;DB_CLOSE_ON_EXIT=FALSE |
Выполнить SQL для соединения | jdbc:h2:;INIT=RUNSCRIPT FROM ‘~/create.sql’ jdbc:h2:file:~/sample;INIT=RUNSCRIPT FROM ‘~/create.sql’;RUNSCRIPT FROM ‘~/populate.sql’ |
Имя пользователя и / или пароль | jdbc:h2:[;USER=][;PASSWORD=] jdbc:h2:file:~/sample;USER=sa;PASSWORD=123 |
Настройки трассировки отладки | jdbc:h2:;TRACE_LEVEL_FILE= jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3 |
Игнорировать неизвестные настройки | jdbc:h2:;IGNORE_UNKNOWN_SETTINGS=TRUE |
Пользовательский режим доступа к файлам | jdbc:h2:;ACCESS_MODE_DATA=rws |
База данных в zip файле | jdbc:h2:zip:!/ jdbc:h2:zip:~/db.zip!/test |
Режим совместимости | jdbc:h2:;MODE= jdbc:h2:~/test;MODE=MYSQL;DATABASE_TO_LOWER=TRUE |
Автоматическое переподключение | jdbc:h2:;AUTO_RECONNECT=TRUE jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE |
Автоматический режим смешивания | jdbc:h2:;AUTO_SERVER=TRUE jdbc:h2:~/test;AUTO_SERVER=TRUE |
Размер страницы | jdbc:h2:;PAGE_SIZE=512 |
Изменить другие настройки | jdbc:h2:;=[;=. ] jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3 |
H2 прост в использовании
1. Скачайте базу данных H2 и откройте официальный сайт (http://www.h2database.com)скачать
2. Распакуйте загружаемый пакет, и вы можете использовать его. Каталог после распаковки выглядит следующим образом
h2 |—bin | | — h2-1.1.116.jar // Пакет jar базы данных H2 (драйвер тоже внутри) | | — h2.bat // скрипт запуска консоли Windows | | — h2.sh // сценарий запуска консоли Linux | | — h2w.bat // скрипт запуска консоли Windows (без черного окна) | — docs // Справочная документация по базе данных H2 (руководство пользователя базы данных H2) | — service // Записываем в сервис через обертку. | — src // Исходный код базы данных H2 | — build.bat // скрипт сборки Windows | — build.sh // скрипт сборки linux
3. Запуск в среде Windows h2.bat , Запуск в среде Linux h2.sh Чтобы открыть консоль
По умолчанию служебный порт TCP базы данных H2 — 9092, порт клиента — 8082, а порт службы PG — 5435.
4. В среде Windows браузер откроется автоматически после запуска файла по адресу: http: // локальный ip: 8082
5. Выберите китайский язык и нажмите «Подключиться», чтобы автоматически создать тестовую базу данных. Файл базы данных находится в ~ В каталоге ~ Представитель Собственный каталог пользователя 。
6. Скопируйте тестовый скрипт sql и выполните
7. Результаты бега следующие:
H2 использует JDBC для подключения
2. Создайте новый проект maven и представьте пакет jar.
dependency> groupId>com.h2databasegroupId> artifactId>h2artifactId> version>1.4.199version> dependency>
3. Отредактируйте тестовый класс JDBC.
package com.test.hsqldb; import java.sql.Connection; import java.sql.DriverManager; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; /** * Hello world! */ public class App public static void main(String[] args) throws SQLException, ClassNotFoundException // Загружаем драйвер JDBC для H2 DB Class.forName(«org.h2.Driver»); // Связываемся с базой данных, автоматически создаем тест базы данных в ~ и получаем соединение объекта соединения String url = «jdbc:h2:~/test»; Connection con = DriverManager.getConnection(url, «sa», «»); // Новая таблица данных String ctreateTable = «DROP TABLE test IF EXISTS; create table test(id integer,name VARCHAR(22) )»; Statement createStatement = con.createStatement(); long f1 = createStatement.executeUpdate(ctreateTable); System.out.println(«Создать таблицу:» + f1); // вставляем данные String insertSql = «ВСТАВИТЬ В ЗНАЧЕНИЯ теста (1, ‘Сяомин’)»; Statement insertStatement = con.createStatement(); long f2 = insertStatement.executeUpdate(insertSql); System.out.println(«Вставить данные:» + f2); // Запросить данные String selectSql = «select id,name from test»; PreparedStatement prepareStatement = con.prepareStatement(selectSql); // Отправляем SQL и возвращаем ResultSet ResultSet rs = prepareStatement.executeQuery(); // Редактируем набор результатов while (rs.next())// Получаем строку данных из БД, есть ли другая int id = rs.getInt(1); // начинаем с 1 String name = rs.getString(2); System.out.println(«id:» + id + » tName:» + name); > // закрываем соединение con.close(); > >
4. Запустите тестовый класс, и результаты будут следующими:
Источник: russianblogs.com
Установите базу данных H2 и используйте H2 Console
Следуйте за нами на нашей фан-странице, чтобы получать уведомления каждый раз, когда появляются новые статьи.
Facebook
1- Download H2
Чтобы скачать базу данных H2 пройдите по следующей ссылке:
Самый простой способ это скачать файл ZIP, который подходит разным операционным системам и не нуждается в установке, вам просто нужно извлечь его в определенную папку и можете его использовать.
OK, теперь я скачиваю файл ZIP.
2- Установить и запустить H2
H2 это база данных полностью написанная с помощью Java. Поэтому чтобы запустить ее, нужно удостовериться что на вашем компьютере установлен Java. Если нет вы можете посмотреть как установить Java по следующим статьям:
После того как вы скачали файл ZIP в предыдущем шаге, нужно извлечь его в определенную папку.
Если вы используете операционную систему Windows вам нужно запустить файл h2.bat просто двойным нажатием на него.
Для других операционных систем как Linux, Mac OS. вам нужно запустить файл h2.sh:
Дать (grant) разрешением файлу h2.sh возможность выполнить (executable) сделав следующую команду:
chmod +x /home/tran/Database/h2/bin/h2.sh
Или использовать интерфейс для разрешения.
Открыть окно Terminal для запуска файла h2.sh:
База данных H2 запущена и окно «H2 Console» открыто на браузере:
3- Что такое H2 Console?
H2 Console это визуальный инструмент, помогающий вам администрировать базу данных H2. На самом деле H2 Console можно использовать для администрации почти всех других реляционных баз данных (Relational Database) (Oracle, SQL Server, MySQL. )
H2 Console позволяет вам сделать запрос и визуально менять данные.
4- H2 Console Connect» создадутся 2 файла на вашем жестком диске, и будут расположены в папке:
5- H2 Console MongoDB






























Источник: betacode.net