H2数据库攻略
H2是一個開源的嵌入式數據庫引擎,采用java語言編寫,不受平臺的限制,同時H2提供了一個十分方便的web控制臺用于操作和管理數據庫內容。H2還提供兼容模式,可以兼容一些主流的數據庫,因此采用H2作為開發期的數據庫非常方便。
Features
| Pure Java | Yes | Yes | Yes | No | No |
| Memory Mode | Yes | Yes | Yes | No | No |
| Encrypted Database | Yes | Yes | Yes | No | No |
| ODBC Driver | Yes | No | No | Yes | Yes |
| Fulltext Search | Yes | No | No | Yes | Yes |
| Multi Version Concurrency | Yes | No | Yes | Yes | Yes |
| Footprint (jar/dll size) | ~1 MB | ~2 MB | ~1 MB | ~4 MB | ~6 MB |
See also the?detailed comparison.
一、引入Maven依賴
在maven中定義H2數據庫的版本屬性
| <properties><h2.version>1.3.172</h2.version></properties>ataNode對象} |
添加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 |
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}" οnerrοr="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> |
四、sql語法圖
1、SELECT
2、INSERT
3、UPDATE
4、DELETE
5、BACKUP
6、EXPLAIN
7、MERGE
8、RUNSCRIPT
運行sql腳本文件
9、SCRIPT
根據數據庫創建sql腳本
10、SHOW
11、ALTER INDEX RENAME
12、ALTER SCHEMA RENAME
13、ALTER SEQUENCE
14、ALTER TABLE
增加列
增加約束
修改列
刪除列
刪除序列
15、ALTER USER
修改用戶名
修改用戶密碼
16、ALTER VIEW
17、COMMENT
18、CREATE CONSTANT
19、CREATE INDEX
20、CREATE ROLE
21、CREATE SCHEMA
22、CREATE SEQUENCE
23、CREATE TABLE
24、CREATE TRIGGER
25、CREATE USER
26、CREATE VIEW
27、DROP
28、GRANT RIGHT授權
給schema授權
復制角色的權限
29、REVOKE RIGHT移除授權
移除角色具有的權限
30、ROLLBACK
從某個還原點(savepoint)回滾
回滾事務
創建savepoint
轉自:http://www.uml.org.cn/sjjm/201403141.asp
總結
- 上一篇: 深入理解Oracle表(5):三大表连接
- 下一篇: JDK1.1 JDK1.2 JDK1.3