hsqldb使用

  • 格式:pdf
  • 大小:164.70 KB
  • 文档页数:4

hsqldb使⽤

1 hsqldb介绍

HyperSQL DataBase 是⼀个现代的关系数据库管理软件,⽐较彻底遵从SQL:2008标准和JDBC4规范。⽀持SQL:2008标准所以的核⼼特性和很多的可选特性。HSQLDB-2.3版本,依照了SQL:2011标准进⾏了重写。 遵从标准是HSQLDB最独特的特点。

还提供了其他特⾊功能:

HyperSQL能够在⽤户 应⽤进程中、⼀个应⽤服务器中、或作为⼀个独⽴的服务器进程提供数据库访问。

能够完全地在内存中运⾏(使⽤极快的内存结构,⽽不是磁盘)

能够灵活地使⽤磁盘持久提供可靠的崩溃恢复

是仅有的⼀个具备⾼性能专⽤⼤对象存储系统(适⽤于GB级的⼤对象)的开源关系型数据库管理系统

还是仅有的⼀个关系型数据库,⽀持创建和访问逗号分割的⼤⽂件作为SQL表

⽀持3个运⾏时可切换事务控制模型,包括完全多线程的多版本并发控制,适⽤于⾼性能的事务处理应⽤

还适⽤于商业智能、ETL、其他处理⼤数据集的应⽤

拥有⼴泛的企业部署选项,如XA事务、连接池数据源、远程认证

适⽤于数据库应⽤的开发、测试、部署。

新的SQL语法兼容模型,已添加到HyperSQL中。这些模型允许与⼀些其他使⽤⾮标准SQL语法的数据库系统⾼度兼容。

2 hsqldb.jar包中的组件

RDBMS Engine 数据库管理系统引擎

JDBC Driver jdbc驱动

Database Manager GUI 数据访问⼯具

3 HyperSQL中的Database

在HyperSQL中,每个database被称为catalog。

有3中类型的catalog(取决于database中的数据是如何存储的)

mem, 数据完全存储在内存中,在JVM进程外没有任何的持久。 ⽤于数据测试、或作为应⽤的复杂的缓存

file, 数据存储在⽂件系统

res, 存储在⼀个Java资源中,如⼀个jar⽂件中(总是只读的) 4 在进程内访问数据库

进程内访问⽐较快,因为数据没有转换,也不⽤在⽹络上发送。

缺点是,从应⽤的外部默认是不可能连接到数据库的。因此,在应⽤运⾏时,你也就⽆法使⽤外部⼯具(如Database Manager GUI)来查看数据库的内容。

通常格式:

Connection conn = DriverManager.getConnection("jdbc:hsqldb:mem:mymendb", "SA", "");

Connection conn = DriverManager.getConnection("jdbc:hsqldb:file:test/testdb", "SA", ""); //相对⽬录,相对于启动JVM的shell命令的执⾏⽬录

Connection conn = DriverManager.getConnection("jdbc:hsqldb:res:org.my.path.resdb", "SA", "");

对数据库做第⼀次进程内连接时,某些常规的数据结构会被初始化、⼀些帮助者线程将被创建。 在此之后,连接创建和对这些连接JDBC⽅法调⽤的执⾏,就好像是做这个调⽤的java应⽤的⼀部分⼀样。

在SQL命令‘shutdown’执⾏后,数据库的全局结构和帮助者线程将被销毁。

5 服务运⾏模式 Server Modes

服务运⾏模式,提供了最⼤限度的可访问性。

在JVM中运⾏的数据库引擎,打开⼀个、或多个进程内catalogs。

它监听来⾃在同⼀个computer或⽹络上其他computer应⽤程序的连接,并转换这些连接为到数据库的进程内连接。

⼀些不同的应⽤程序(客户端)都能够连接到数据库服务,检索、更新信息,使⽤HyperSQL JDBC驱动。

在⼤多数server modes中,数据库服务能够服务不受限个数据库(在数据库服务启动时指定,可选地,当接收到⼀个连接请求时)

在开发过程中,服务模式是运⾏数据库的⾸选模型。在应⽤运⾏时,允许你从⼀个独⽴的数据库访问⼯具查询数据库。

基于客户端与数据库服务通讯使⽤的协议,有3个服务模式:

HSQL Server

是运⾏⼀个数据库服务的⾸选(最佳)⽅法,也是最快的⼀个。该模式使⽤⼀个私有的通讯协议。

运⾏命令:

hsqldb-2.3.2\data>java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb/mydb --dname.0 my

启动⼀个默认的数据库(⽂件名:mydb/mydb, 公共名:my)

HSQL HTTP Server

该模式把数据库服务限制为HTTP协议。使⽤该访问⽅法的唯⼀原因是,客户端、服务端防⽕墙的限制。在没有该现在的场景中,不应该使⽤该模式。

HyperSQL HTTP Server 是⼀个特定的web服务器,运⾏JDBC客户端通过HTTP连接。该服务器同样能够作为⼀个静态页⾯的⼩型通⽤的Web服务器。

HSQL HTTP Servlet

使⽤HTTP协议。当⼀个独⽴的servlet引擎(Tomcat, Resin)、或应⽤服务器,要提供对数据库的访问时使⽤。该模式从servlet引擎独⽴启动。

在hsqldb.jar中的Servlet类应该被安装到服务器中,以提供连接。使⽤⼀个应⽤服务器属性指定数据库⽂件的路径

该模式能够服务多个数据库(同时跑多个数据库)

HTTP Server 和 HTTP Servlet 模式,在客户端使⽤JDBC驱动都能够访问。没有给数据库提供⼀个Web前端。

6 连接到⼀个Database服务器

连接到 ⼀个本地的 hsql server :

Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/my", "SA", "");

连接到 ⼀个本地的 http server :

Connection conn = DriverManager.getConnection("jdbc:hsqldb:http://localhost/my", "SA", "");

7 测试例⼦

1)创建⼀个外部使⽤名为'my'的数据库

2)使⽤hsqldb.jar管理数据库

3)使⽤java查询

public static void main(String[] args) throws SQLException { try { Class.forName("org.hsqldb.jdbc.JDBCDriver"); } catch (ClassNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/my", "sa", ""); Statement stmt = conn.createStatement(); ResultSet rs = stmt.executeQuery("select id, firstname, lastname from customer"); while (rs.next()) { System.out.println("id: " + rs.getInt("id")); System.out.println("firstname: " + rs.getString("firstname")); System.out.println("lastname: " + rs.getString("lastname")); } rs.close(); stmt.close(); conn.close(); } /* id: 1 firstname: Asn lastname: Judy */