`

hsqldb入门

阅读更多

hsqldb是一个完全用java编写的数据库,既可以独立运行也可以嵌入java开发的项目中。整个jar包只有600多K,是测试和演示时的极品选择。

2.1. 第一个程序

首先我们要下载hsqldb,他们的官方网站在http://www.hsqldb.org ,下载了zip发布包找到里边的hsqldb.jar,这就是我们需要的数据库程序。

写一个测试连接的程序。

import java.sql.DriverManager; import java.sql.Connection; public class DbUtils { public static void main(String[] args) throws Exception { // 加载驱动 Class.forName("org.hsqldb.jdbcDriver" ); // 连接数据库的地址 String url = "jdbc:hsqldb:mem:." ; String username = "sa" ; String password = "" ; Connection conn = null; try { // 创建与数据库的连接 conn = DriverManager.getConnection(url, username, password); System.out.println("成功连接到数据库:" + conn); } catch (Exception ex) { System.out.println("连接失败:" + ex); } finally { // 关闭连接,释放资源 if (conn != null) { conn.close(); } } } }

加载驱动程序类名是org.hsqldb.jdbcDriver,它就在hsqldb.jar中。

连接数据库使用的用户名为sa,密码为空,这是默认的数据库管理员。

数据库连接的url地址是jdbc:hsqldb:mem:.。所有jdbc连接url都是以jdbc开头的,第一个冒号后便的部分是使用的驱动别 名,这里的hsqldb就代表我们将使用org.hsqldb.jdbcDriver,第二个冒号后是每个数据库自己特定的访问地址,这里的mem:.表 示使用内存存储模式,连接的数据库名称是“.”。

2.2. 单独运行与嵌入调用

之前提到hsqldb支持单独运行和嵌入调用两种,在此我们讨论一下这两种调用方式的利弊。

  1. 嵌入调用

    hsqldb是完全使用java编写的,我们可以在自己写的程序里调用hsqldb,就像启动一个普通的线程一样,让hsqldb与我们的程序运行在同一个jvm中。

    像 我们上面的例子中使用的就是嵌入调用的形式。DbUtils执行的过程中会启动hsqldb服务器并与之建立连接,在关闭连接释放资源后,jvm关闭的同 时也将hsqldb服务器关闭。DbUtils和hsqldb运行在同一个jvm上,共享这个jvm分配的内存等资源。

  2. 单独运行

    单独启动一个jvm运行hsqldb,客户程序与服务器程序运行在不同的jvm中,双方通过socket交换数据,客户程序的启动和关闭不会直接影响hsqldb。

    我们可以使用它自带的org.hsqldb.Server,启动脚本如下。

    set classpath=hsqldb-1.8.0.7.jar java org.hsqldb.Server
    
    

    org.hsqldb.Server会自动去读取server.properties中的配置。

    server.port=9100 server.database.0=mem:test server.dbname.0=test
    
    

    这里启动一个监听9100端口的hsqldb服务器,服务器中包含一个数据库,使用mem:test的存储方式,对外的数据库名称是test。

    为了连接这个数据库,需要修改连接数据库使用的url。

    String url = "jdbc:hsqldb:hsql://localhost:9100/test"
    
    

    hsql表示我们将使用hsqldb自身的socket方式进行连接。连接的数据库在localhost的9100端口,test是我们需要进行连接的数据库名称。

    如果希望关闭hsqldb数据库,可以直接关闭java弹出的console窗口。

2.3. 四种存储方式

hsqldb拥有四种存储数据的方式,之前见过的有mem和hsql,下面来介绍一下它们的用法和区别。

  1. mem,内存(memory)存储方式。

    hsqldb启动的时候会在内存中建立对应的表结构,运行期间对数据做出的所有修改都保存到内存中,最后关闭hsqldb的同时,内存中的所有数据也会全部丢失。

    示例代码02-03/Mem.java中,首先创建表结构,并向数据库中写入两条语句:

    String[] sqls = { "create table test(id bigint,name varchar(200))" , "insert into test(id,name) values(1,'lingirl')" , "insert into test(id,name) values(2,'叮咚')" };
    
    

    然后执行查询,可以看到两条数据已经成功保存进数据库了。

    1 lingirl 2 叮咚
    
    

    mem方式的缺点是每次启动hsqldb都要先创建表结构,插入初始数据,关闭hsqldb的同时数据也会全部丢失。

    mem方式的优点是所有操作都在内存中进行,不会生成额外的数据文件,可以保证每次创建的数据库都是绝对干净的,这点对测试来讲很有用。

  2. file,文件存储方式。

    hsqldb使用文件保存数据库配置,表结构和更新的数据。

    hsqldb运行过程中会生成四个文件,它们的文件名都是与连接url地址对应的,示例02-03/File.java中配置的url为"jdbc:hsqldb:file:db/file",对应的将是db目录下所有以file开头的文件。

    1. file.properties存放数据库配置,包括数据库版本,缓存,表结构设置等等。

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

      这个文件在hsqldb启动时自动生成,正常关闭时会自动删除,但非法关闭会无法删除这个文件,如果因为这个文件出现数据库服务启动的情况,就需要手工删除。

    3. file.script和file.log

      hsqldb使用这两个文件保存数据表结构和数据,因为用到了缓存,更新的数据不会直接写入文件,而是在内存中积累一定量后,才会批量写入file.log这个日志文件。

      file.script用来保存最终数据,hsqldb正常关闭的时候会把内存和日志文件(file.log)中的数据写入file.script,并删除日志(file.log)文件。

      如果出现非正常关闭的情况,内存中缓存的数据会丢失,file.log也无法删除,不过不用担心,下次启动的时候hsqldb会先检测是否有未删除的file.log,将其中的数据写入file.script,再读取file.script中的数据,进行初始化操作。

      File.java中的sql语句有了变化,因为使用文件保存了表结构,每次操作之前还是先删除它们比较保险。

      String[] sqls = { "drop table test if exists" , "create table test(id bigint,name varchar(200))" , "insert into test(id,name) values(1,'lingirl')" , "insert into test(id,name) values(2,'叮咚')" };
      
      

      多了这条清空语句,我们可以得到与mem相同的查询结果,如果不删除表 ,把插入语句修改成不冲突的形式,我们就可以看到每次查询结果不断增多。因为即使hsqldb关闭了,数据也会保存在文件里。

      拜 缓存所赐,像我们这样放任hsqldb随jvm关闭,一定会丢失数据,为了这一点,我们在url上加入了特殊标记String url = "jdbc:hsqldb:file:db/file;shutdown=true",保证每次conn.close()都会关闭数据,将数据写入 file.script,相对的也使缓存完全丧失了效果。

      当然,也可以向数据库发送shutdown语句,正常关闭数据库。

  3. res,资源存储方式。

    它 是mem与file两者的结合,我们把res.properties和res.script放到classpath下的db/目录下,对应url = "jdbc:hsqldb:res:/db/res"。数据库启动的时候会去这两个文件里读取数据进行初始化,但不会生成res.lck和 res.log,以后进行的所有操作就都在内存里了,关闭数据库也不会写入res.script。

    res就像是使用file提供初始数据的mem内存访问方式,它在系统演示的时候十分方便,设置一次初始数据就可以演示多次,而且不会影响初始数据的结果。用于测试就不太适合了,res.script明显没有sql语句便于维护,还是老老实实用sql导入更合适。

    res唯一的限制是不能进行建表和删表的操作,你可以插入,修改,删除数据,但是不能修改表的结构。

  4. hsql,socket访问方式。

    使用socket链接,从一个单独运行的hsqldb服务器中获得数据,这个服务器中的hsqldb又可能是这四种存储方式。只要你想,就完全可以做成一条链状结构。

2.4. 正常关闭jdbc

第一种方式,url = "jdbc:hsqldb:file:db/file;shutdown=true",这样每次conn.close()都会执行shutdown命令关闭数据,实际上扼杀了缓存的效果。

另一个方式,在jvm关闭前,向数据库发送shutdown命令,让它正常关闭。

 

分享到:
评论

相关推荐

    spring-adventure-football-manager:Spring MVC、Hibernate、JPA、Hsqldb 入门

    Spring冒险足球经理Spring MVC、Hibernate、JPA、Hsqldb 入门

    hsqldb快速入门

    hsqldb快速入门,如何安装使用hsql,如何和web应用结合

    HSQLDB快速上手实录

    不跟你玩了~先介绍一下这个HSQLDB吧,传说是个纯java写的数据库,大名叫HyperSQL DB,不用安装不用部署,核心就一个jar文件,扔到工程里面开个jvm运行一下就行了,完全符合我想要的效果~这是我这两天研究的记录,...

    java_hsqldb.jar_sqltool.jar_快速入门文档和代码

    这个其实只要有两个jar 包就可以了:hsqldb.jar 和 sqltool.jar 不用安装的 另含快速入门文档和代码

    Eclipse+Web开发从入门到精通(实例版).pdf

    如今,Eclipse越来越成为众多...在SUN、IBM等公司的积极推动下,“开源”之势在Java社区中日新月异,Hibernate、Struts、HSQLDB等一大批优秀的开源框架脱颖而出,同时基于这些成熟框架而构建的成功企业应用也越来越多

    todo-spring-boot-jpa:Todo是使用HSQL和JPA实现为Spring Boot应用程序的RESTful任务管理API

    待办事项API ... 每个任务都有一个名称以及其他可选值,包括截止日期,状态和描述。...入门 要创建和管理任务,请首先创建一个用户。 请参阅下面的“用户”部分中的注册。 注意:所有日期均指定为字符串,即yyyy-MM-d

    jacklyn-app:Jacklyn入门应用程序

    Jacklyn Codebase Starter-Java应用程序该入门程序提供了一个项目模板,用于使用Jacklyn Codebase构建应用程序,该程序将在JVM中作为Java可执行文件运行。 在Java 7、8、9和10上运行。嵌入式Jetty服务器用于处理所有...

    cs-tech-challenge

    入门 数据库 我们使用基于文件的HSQLDB 2.6.0。 因此,即使在Spring Boot应用程序或数据库关闭后,数据也将保留。 以下是在本地设置数据库的步骤。 从下载HSQLDB 2.6.0 默认情况下,HSQLDB使用hsqldb / lib文件夹...

    mybatis-examples

    Mybatis 入门进阶模块功能描述mybatis-simplemybatis简单例子mybatis核心包使用mybatis-springmybatis spring集成例子mybatis-spring-bootmybatis spring boot集成例子数据库设定driverClassName = "org.hsqldb.jdbc...

    flyway-sbt:Flyway SBT插件

    SBT 1.x的插件 欢迎来到sbt v1.x插件首页。 将告诉您如何入门。 该项目基于原始 ,后者在4.2.1版之前存储库中。 保养 该存储库是一个社区项目,并未由Redgate的...libraryDependencies += "org.hsqldb" % "hsqldb" % "2

    mtenion:MTension 项目的存储库

    Spring MVC 4 快速入门 Maven 原型 概括 该项目是 Spring MVC 4 Web 应用程序的 Maven 原型。 生成的项目特征 适用于 Servlet 3.0 环境的 No-xml Spring MVC 4 Web 应用程序 百里香、Bootstrap JPA 2.0 (Hibernate/...

    Rays-Rentals

    Spring MVC 4快速入门Maven原型概括该项目是Spring MVC 4 Web应用程序的Maven原型。生成的项目特征用于Servlet 3.0环境的No-xml Spring MVC 4 Web应用程序胸腺,引导JPA 2.0(Hibernate / HSQLDB / Spring Data JPA...

    Mybatis-PageHelper:Mybatis通用分页插件

    新的JavaDoc API: : 新书《 MyBatis从入门到精通》预售地址:,, CSDN博客: : GitHub项目: : 支持物理分页PageHelper支持以下数据库: Oracle Mysql MariaDB SQLite Hsqldb PostgreSQL DB2 SqlServer(2005,2008...

    AppDirectTest

    默认情况下,它使用 hsqldb 数据库进行“持久化”。 入门 注意:该应用程序要求安装 Java 8。 要构建应用程序: $ mvn clean package 启动应用程序: $ java $JAVA_OPTS -jar target/dependency/webapp-runner...

    obevo:Obevo是一个数据库部署工具,用于处理企业级架构和复杂性

    支持的平台:DB2,H2,HSQLDB,Microsoft SQL Server,MongoDB,Oracle,PostgreSQL,Redshift(来自Amazon),Sybase ASE,Sybase IQ 还支持NoSQL(MongoDB)平台! Obevo不仅可以用于关系数据库。 MongoDB支持...

Global site tag (gtag.js) - Google Analytics