H2數據庫攻略


H2是一個開源的嵌入式數據庫引擎,采用java語言編寫,不受平台的限制,同時H2提供了一個十分方便的web控制台用於操作和管理數據庫內容。H2還提供兼容模式,可以兼容一些主流的數據庫,因此采用H2作為開發期的數據庫非常方便。

一、引入Maven依賴

在maven中定義H2數據庫的版本屬性

<properties>
<h2.version>1.3.172</h2.version>
</properties>

添加H2依賴

 <dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
<scope>test</scope>
</dependency>

二、運行方式

1、在內存中運行

數據庫只在內存中運行,關閉連接后數據庫將被清空,適合測試環境

連接字符串:

jdbc:h2:mem:DBName;DB_CLOSE_DELAY=-1

如果不指定DBName,則以私有方式啟動,只允許一個連接

2、嵌入式

數據庫持久化存儲為單個文件

連接字符串:

jdbc:h2:file:~/.h2/DBName;AUTO_SERVER=TRUE

~/.h2/DBName表示數據庫文件的存儲位置,如果第一次連接則會自動創建數據庫

3、服務模式

H2支持三種服務模式:

1.web server:此種運行方式支持使用瀏覽器訪問H2 Console

2.TCP server:支持客戶端/服務器端的連接方式

3.PG server:支持PostgreSQL客戶端

啟動tcp服務連接字符串示例:

jdbc:h2:tcp://localhost/~/test 使用用戶主目錄

jdbc:h2:tcp://localhost//data/test 使用絕對路徑

4、連接字符串參數

1.DB_CLOSE_DELAY:要求最后一個正在連接的連接斷開后,不要關閉數據庫

2.MODE=MySQL:兼容模式,H2兼容多種數據庫,該值可以為:DB2、Derby、HSQLDB、MSSQLServer、MySQL、Oracle、PostgreSQL

3.AUTO_RECONNECT=TRUE:連接丟失后自動重新連接

4.AUTO_SERVER=TRUE:啟動自動混合模式,允許開啟多個連接,該參數不支持在內存中運行模式

5.TRACE_LEVEL_SYSTEM_OUT、TRACE_LEVEL_FILE:輸出跟蹤日志到控制台或文件, 取值0為OFF,1為ERROR(默認值),2為INFO,3為DEBUG

6.SET TRACE_MAX_FILE_SIZE mb:設置跟蹤日志文件的大小,默認為16M

5、啟動服務模式,打開H2 Console web頁面

啟動服務,在命令行中執行

java -cp h2*.jar org.h2.tools.Server

執行如下命令,獲取選項列表及默認值

java -cp h2*.jar org.h2.tools.Server -?

常見的選項如下:

-web:啟動支持H2 Console的服務

-webPort <port>:服務啟動端口,默認為8082

-browser:啟動H2 Console web管理頁面

-tcp:使用TCP server模式啟動

-pg:使用PG server模式啟動

此外,使用maven也可以啟動H2服務

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>1.0.0</modelVersion>
<version>1.0.0</version>
<groupId>groupid</groupId>
<artifactId>h2-console</artifactId>
<name>H2 Console</name>
<packaging>pom</packaging>

<properties>
<h2.version>1.3.172</h2.version>
</properties>

<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>${h2.version}</version>
<scope>runtime</scope>
</dependency>
</dependencies>

<build>
<plugins>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>exec-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>java</goal>
</goals>
</execution>
</executions>
<configuration>
<mainClass>org.h2.tools.Server</mainClass>
<arguments>
<argument>-web</argument>
<argument>-webPort</argument>
<argument>8090</argument>
<argument>-browser</argument>
</arguments>
</configuration>
</plugin>
</plugins>
</build>
</project>

在命令行中執行如下命令啟動H2 Console

mvn exec:java

或者建立一個bat文件

@echo off
call mvn exec:java
pause

此操作相當於執行了如下命令:

java -jar h2-1.3.168.jar -web -webPort 8090 -browser

三、應用程序配置

1、Properties配置

java應用程序關於數據庫的Properties配置文件示例如下:

#h2 database settings
jdbc.driver=org.h2.Driver
jdbc.url=jdbc:h2:file:~/.h2/quickstart;AUTO_SERVER=TRUE;DB_CLOSE_DELAY=-1
jdbc.username=sa
jdbc.password=

#connection pool settings
jdbc.pool.maxIdle=5
jdbc.pool.maxActive=40

2、初始化數據庫

(1)、在Maven中初始化數據庫

可以創建一個Profile,專門用於初始化數據庫。在maven中可以通過maven-antrun-plugin執行ant任務,在ant任務中使用sql標簽可以執行sql腳本文件,配置示例如下:

<profile>
<id>refresh-db</id>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<configuration>
<target>
<property file="src/main/resources/application.properties" />
<sql driver="${jdbc.driver}" url="${jdbc.url}" userid="${jdbc.username}" password="${jdbc.password}" onerror="continue" encoding="${project.build.sourceEncoding}">
<classpath refid="maven.test.classpath" />
<transaction src="src/main/resources/sql/h2/schema.sql"/>
<transaction src="src/test/resources/data/h2/import-data.sql"/>
</sql>
</target>
</configuration>
</plugin>
</plugins>
</build>
</profile>

執行如下命令調用該Profile,初始化數據庫

mvn antrun:run -Prefresh-db

(2)、在Spring中初始化數據庫

Spring Profile和maven profile一樣,也可以模擬不同的開發環境。在Spirng中可以通過jdbc:initialize-database初始化數據庫,配置示例如下

<beans profile="test">
<context:property-placeholder ignore-resource-not-found="true"
location="classpath*:/application.properties,
classpath*:/application.test.properties" />

<!-- Spring Simple連接池 -->
<bean id="dataSource" class="org.springframework.jdbc.datasource.SimpleDriverDataSource">
<property name="driverClass" value="${jdbc.driver}" />
<property name="url" value="${jdbc.url}" />
<property name="username" value="${jdbc.username}" />
<property name="password" value="${jdbc.password}" />
</bean>

<!-- 初始化數據表結構 -->
<jdbc:initialize-database data-source="dataSource" ignore-failures="ALL">
<jdbc:script location="classpath:sql/h2/schema.sql" />
<jdbc:script location="classpath:data/h2/import-data.sql" encoding="UTF-8"/>
</jdbc:initialize-database>
</beans>

參靠:

1、Java嵌入式數據庫H2學習總結(一)——H2數據庫入門

2、Java嵌入式數據庫H2學習總結(二)——在Web應用程序中使用H2數據庫

3、Java嵌入式數據庫H2學習總結(三)——在Web應用中嵌入H2數據庫


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM