比较三款嵌入式数据库

  Hsqldb Derby H2
纯java 支持 支持 支持
内存模式 支持 不支持 支持
事务隔离 不支持 支持 支持
基于代价的优化方式 不支持 支持 支持
数据库加密 不支持 支持 支持
ODBC驱动 不支持 不支持 支持
全文本搜索 不支持 不支持 支持
多版本并发控制 不支持 不支持 支持
主文件大小 ~600kb ~2MB ~1MB

一、Hsqldb数据库

Hsqldb是一个纯java编写的数据库,具有标准的sql语法和java接口。体积小才563kb,仅仅一个hsqldb.jar就包括了数据库引擎,数据库驱动,还有其他用户界面操作等内容。Jboss应用程序服务器默认也提供这个数据库引擎。

Hsqldb有四种运行模式:

1、内存(Memory-Only)模式:所有数据都在内存中完成,不会实例化到文件,jdbc连接方法为jdbc:hsqldb:mem:dbName

2、进程(In_Process)模式:又称Standalone模式,数据库引擎作为应用程序的一部分,在同一个JVM中运行。从应用程序中启动数据库,所有数据写到文件中。jdbc连接方法为:jdbc:hsqldb:file:/D:/dbname(绝对路径)或jdbc:hsqldb:file:dbname(相对路径)

3、服务器模式:和其他数据库类似,采用hsqldb专有通讯协议。可以使用HSQL Database Manager中访问数据库。jdbc连接方式:jdbc:hsqldb:hsql://localhost:port/dbname

4、web服务器模式。以web服务器启动,并通过HTTP协议接受客户端命令。jdbc连接方式:jdbc:hsqldb:http://localhost:port/dbname

使用方法(springboot+jpa)

1、引入pom

		<dependency>
			<groupId>org.hsqldb</groupId>
			<artifactId>hsqldb</artifactId>
			<version>2.5.0</version>
		</dependency>

 2、配置文件

spring.datasource.driver-class-name=org.hsqldb.jdbcDriver
spring.datasource.url=jdbc:hsqldb:file:/D:/sumengnan;shutdown=true
spring.datasource.username=sa
spring.datasource.password=
#jpa,注意数据库改成hsql
spring.jpa.database=hsql
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

数据库图形化管理工具

maven仓库找到hsqldb.jar包。包内有两种图形工具DatabaseManagerSwing和DatabaseManager类似。

执行命令:Java -cp hsqldb-2.5.0.jar org.hsqldb.util. DatabaseManagerSwing(或DatabaseManager)

注:java -cp命令是指定类运行所依赖其他类的路径

进程(In_Process)模式保存的文件

•sumengnan.lck:用来标记当前数据库是否已经被某一个hsqldb访问了,同一时间只有一个hsqldb能操作数据库文件,这样才能保证不会出现数据冲突

•sumengnan.properties:存放数据库配置,包括数据库版本,缓存,表结构设置

•sumengnan.script:用来保存最终数据

•sumengnan.log:日志文件

原理:hsqldb使用script和log保存数据表结构和数据,因为用到缓存,数据在内存中积累多后才写入log文件

正常关闭时会把内存和log中的文件写入script文件,并删除log文件。

非正常关闭时内存中缓存的数据会丢失,但log文件变成不能删除。下次启动时hsqldb会检测是否有log文件,有则将数据写入script文件,再读取script文件初始化数据库


二、Derby数据库

Derby是Apache下的一个开源项目。支持java编写的存储过程和函数。Derby 的性能对其他嵌入式数据库来说是不错的 

有两种运行模式

1、 内嵌模式:Derby数据库与应用程序共享同一个JVM,通常由应用程序负责启动和停止,对除启动它的应用程
序外的其它应用程序不可见,即其它应用程序不可访问它;jdbc连接格式:jdbc:derby:sumengnan;create=true(内存中运行)或jdbc:derby:D:/sumengnan;create=true(实例化到文件)。create=true表示不存在则创建,否则报错。

2、 网络模式:Derby数据库独占一个JVM,做为服务器上的一个独立进程运行。在这种模式下,允许有多个应用
程序来访问同一个Derby数据库。(需要去官网下载Derby:http://db.apache.org/derby/derby_downloads.html,中bin文件夹下有脚本setNetworkServerCP,启动服务用)jdbc连接格式:jdbc:derby://localhost:1527/sumengnan;create=true

数据库管理工具

没有图形化界面,需要使用官网下载的bin文件夹中的ij.bat,连接数据库,执行sql语句,如下:

使用方法(springboot+jpa)

1、引入pom

<dependency>
    <groupId>org.apache.derby</groupId>
    <artifactId>derby</artifactId>
    <version>10.14.2.0</version>
</dependency>

2、配置文件

spring.datasource.driver-class-name=org.apache.derby.jdbc.EmbeddedDriver
spring.datasource.url=jdbc:derby:D:/sumengnan;create=true
spring.datasource.username=root
spring.datasource.password=
#jpa,注意数据库改成DERBY
spring.jpa.database=DERBY
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update

 注意:实体中表名不能取名为user,项目启动创建表时会报错,改一下表名就好

 

网络模式保存的文件

三、H2数据库(推荐使用)

H2是一个内存数据库,提供基于浏览器的控制台管理程序,用法和Mysql数据库没有什么区别。

H2比HSQLDB的最大的优势就是h2提供了一个十分方便的web控制台用于操作和管理数据库内容,这点比起HSQLDB的swing和awt控制台实在好用多了,并且支持集群

有三种运行模式

1、内嵌模式:应用和数据库同在一个JVM中,通过JDBC进行连接

2、服务器模式:和普通数据库一样。支持持久数据库和内存数据库。没有打开连接数和打开数据库数量方面的限制。

3、混合模式:混合模式是内嵌模式和服务器模式的组合。第一个应用通过内嵌模式与数据库建立连接。同一时候也作为一个服务器启动。于是另外的应用(运行在不同的进程或是虚拟机上)能够同一时候訪问相同的数据

具体jdbc连接格式如下:

连接

url格式

嵌入式(本地)连接

jdbc:h2:[file:][<path>]<databaseName>
jdbc:h2:~/test
jdbc:h2:file:/test
jdbc:h2:file:C:/test (Windows only)

内存数据库(私有)

jdbc:h2:mem:

内存数据库(被命名)

jdbc:h2:mem:<databaseName>
jdbc:h2:mem:test

使用TCP/IP的服务器模式(远程连接)

 

jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
jdbc:h2:tcp://localhost/~/test
jdbc:h2:tcp://dbserv:8080/~/test

使用SSL/TLS的服务器模式(远程连接)

 

jdbc:h2:ssl://<server>[:<port>]/<databaseName>
jdbc:h2:ssl://secureserv:8080/~/test;

使用加密文件

jdbc:h2:<url>;CIPHER=[AES|XTEA]
jdbc:h2:ssl://secureserv/~/test;CIPHER=AES
jdbc:h2:file:~/test;CIPHER=XTEA

文件锁

jdbc:h2:<url>;FILE_LOCK={NO|FILE|SOCKET}
jdbc:h2:file:~/test;FILE_LOCK=NO
jdbc:h2:file:~/test;CIPHER=XTEA;FILE_LOCK=SOCKET

仅打开存在的数据库

jdbc:h2:<url>;IFEXISTS=TRUE
jdbc:h2:file:~/test;IFEXISTS=TRUE

当虚拟机退出时并不关闭数据库

jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE

用户名和密码

jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>]
jdbc:h2:file:~/test;USER=sa;PASSWORD=

更新记入索引

jdbc:h2:<url>;LOG=2
jdbc:h2:file:~/sample;LOG=2

调试跟踪项设置

jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..3>
jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3

忽略位置参数设置

jdbc:h2:<url>;IGNORE_UNKNOWN_SETTINGS=TRUE

指定文件读写模式

jdbc:h2:<url>;ACCESS_MODE_LOG=rws;ACCESS_MODE_DATA=rws

Zip文件中的数据库

jdbc:h2:zip:<zipFileName>!/<databaseName>
jdbc:h2:zip:~/db.zip!/test

兼容模式

jdbc:h2:<url>;MODE=<databaseType>
jdbc:h2:~/test;MODE=MYSQL

自动重连接

jdbc:h2:<url>;AUTO_RECONNECT=TRUE
jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE

自动混合模式

jdbc:h2:<url>;AUTO_SERVER=TRUE
jdbc:h2:~/test;AUTO_SERVER=TRUE

更改其他设置

jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>...]
jdbc:h2:file:~/test;TRACE_LEVEL_SYSTEM_OUT=3

使用方法(springboot+jpa)

1、引入pom

<dependency>
    <groupId>com.h2database</groupId>
    <artifactId>h2</artifactId>
    <version>1.4.200</version>
</dependency>

2、配置文件

spring.datasource.driver-class-name=org.h2.Driver
spring.datasource.url=jdbc:h2:file:E:/sumengnan
spring.datasource.username=root
spring.datasource.password=
#jpa,注意数据库改成h2
spring.jpa.database=h2
spring.jpa.show-sql=true
spring.jpa.hibernate.ddl-auto=update
#在浏览器中开启控制台
spring.h2.console.enabled=true

3、浏览器中输入http://localhost:8686/h2-console,输入jdbc url和username即可打开web控制台

保存的文件

 

 

 

 

Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐