java嵌入式数据库之hsqldb、derby、h2
简介Hsqldb是一个纯java编写的数据库,具有标准的sql语法和java接口。体积小才563kb,仅仅一个hsqldb.jar就包括了数据库引擎,数据库驱动,还有其他用户界面操作等内容。Jboss应用程序服务器默认也提供这个数据库引擎。Hsqldb有四种运行模式:1、内存(Memory-Only)模式:所有数据都在内存中完成,不会实例化到文件,jdbc连接方法为jdbc:hsqld...
比较三款嵌入式数据库
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:mem: | |
jdbc:h2:mem:<databaseName> | |
使用TCP/IP的服务器模式(远程连接)
| jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName> |
| jdbc:h2:ssl://<server>[:<port>]/<databaseName> |
jdbc:h2:<url>;CIPHER=[AES|XTEA] | |
jdbc:h2:<url>;FILE_LOCK={NO|FILE|SOCKET} | |
jdbc:h2:<url>;IFEXISTS=TRUE | |
jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE | |
jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>] | |
jdbc:h2:<url>;LOG=2 | |
jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..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:<url>;MODE=<databaseType> | |
jdbc:h2:<url>;AUTO_RECONNECT=TRUE | |
jdbc:h2:<url>;AUTO_SERVER=TRUE | |
jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>...] |
使用方法(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控制台
保存的文件
开放原子开发者工作坊旨在鼓励更多人参与开源活动,与志同道合的开发者们相互交流开发经验、分享开发心得、获取前沿技术趋势。工作坊有多种形式的开发者活动,如meetup、训练营等,主打技术交流,干货满满,真诚地邀请各位开发者共同参与!
更多推荐
所有评论(0)