H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一个十分方便的web控制台用于操作和管理数据库内容。H2还提供兼容模式,可以兼容一些主流的数据库,因此采用H2作为开发期的数据库非常方便。
一、引入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
或者建立一个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> |
四、sql语法图
1、SELECT
![](images/2014031411.png)
2、INSERT
![](images/2014031412.png)
3、UPDATE
![](images/2014031413.png)
4、DELETE
![](images/2014031414.png)
5、BACKUP
![](images/2014031415.png)
6、EXPLAIN
![](images/2014031416.png)
7、MERGE
![](images/2014031417.png)
8、RUNSCRIPT
运行sql脚本文件
![](images/2014031418.png)
9、SCRIPT
根据数据库创建sql脚本
![](images/2014031419.png)
10、SHOW
![](images/20140314110.png)
11、ALTER INDEX RENAME
![](images/20140314111.png)
12、ALTER SCHEMA RENAME
![](images/20140314112.png)
13、ALTER SEQUENCE
![](images/20140314113.png)
14、ALTER TABLE
增加列
![](images/20140314114.png)
增加约束
![](images/20140314115.png)
修改列
![](images/20140314116.png)
删除列
![](images/20140314117.png)
删除序列
![](images/20140314118.png)
15、ALTER USER
修改用户名
![](images/20140314119.png)
修改用户密码
![](images/20140314120.png)
16、ALTER VIEW
![](images/20140314121.png)
17、COMMENT
![](images/20140314122.png)
18、CREATE CONSTANT
![](images/20140314123.png)
19、CREATE INDEX
![](images/20140314124.png)
20、CREATE ROLE
![](images/20140314125.png)
21、CREATE SCHEMA
![](images/20140314126.png)
22、CREATE SEQUENCE
![](images/20140314127.png)
23、CREATE TABLE
![](images/20140314128.png)
24、CREATE TRIGGER
![](images/20140314129.png)
25、CREATE USER
![](images/20140314130.png)
26、CREATE VIEW
![](images/20140314131.png)
27、DROP
![](images/2014031432.jpg)
28、GRANT RIGHT授权
![](images/20140314133.png)
给schema授权
![](images/20140314134.png)
复制角色的权限
![](images/20140314135.png)
29、REVOKE RIGHT移除授权
![](images/20140314136.png)
移除角色具有的权限
![](images/20140314137.png)
30、ROLLBACK
从某个还原点(savepoint)回滚
![](images/20140314138.png)
回滚事务
![](images/20140314139.png)
创建savepoint
|