java嵌入式数据库之hsqldb、derby、h2

比较三款嵌入式数据库

 HsqldbDerbyH2
纯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控制台

保存的文件

 

 

 

 

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值