精华内容
下载资源
问答
  • 2021-04-21 19:04:30

    Hsqldb是一个开放源代码的 JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速的。具有Server模式,进程内模式(In- Process)和内存模式(Memory-Only)三种。运行Hsqldb需要hsqldb.jar包, 它包含了一些组件和程序。每个程序需要不同的命令来运行。它位于项目的lib目录下,目前的版本是1.8.0.5。官方的下载地址是:http: //prdownloads.sourceforge.net/hsqldb/hsqldb_1_8_0_5.zip?download

    在介绍这些模式之前我们需要了解一些Hsqldb所涉及的一些文件。每个Hsqld数据库包含了2到5个命名相同但扩展名不同的文件,这些文件位于同一个目录下。例如,名位"test"的数据库包含了以下几个文件:

    test.properties

    test.script

    test.log

    test.data

    test.backup

    properties文件描述了数据库的基本配置。script文件记录了表和其它数据库对象的定义。log文件记录了数据库最近所做的更新。data文件包含了cached(缓冲)表的数据,而backup文件是将data文件压缩备份,它包含了data文件上次的最终状态数据。所有这些文件都是必不可少的,千万不可擅自删除。但如果你的数据库没有缓冲表(cached table),test.data和test.backup文件是不会存在。

    接下来我们对Hsqldb的三种模式进行简单介绍,同时包括部分工具的启动的方式。

    一、Server模式

    Server模式提供了最大的可访问性。应用程序(客户端)通过Hsqldb的JDBC驱动连接服务器。在服务器模式中,服务器在运行的时候可以被指定为最多10个数据库。根据客户端和服务器之间通信协议的不同,Server模式可以分为以下三种:

    1、Hsqldb Serve

    这种模式是首选的也是最快的。它采用HSQLDB专有的通信协议。启动服务器需要编写批处理命令。Hsqldb提供的所有工具都能以java class归档文件(也就是jar)的标准方式运行。假如hsqldb.jar位于相对于当前路径的../lib下面。我们的命令将这样写:

    java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 demoDB

    现在你可能会疑惑,[-database.0 ]、[dbname.0]为什么在后面加[0]。_... ...我们不是在前面说服务模式运行的时候可以指定10个数据库吗,如有多个数据库,则继续写命令行参数-database.1 aa -dbname.1 aa -database.2 bb-dbname.2 bb ... ...

    新建文本文件保存上面命令,文件名可以随意,将后缀名改成bat,然后直接执行批处理文件即可。在以后介绍的执行启动工具的命令采用同样方法。

    上面启动服务器的命令启动了带有一个(默认为一个数据库)数据库的服务器,这个数据库是一个名为"mydb.*"文件,这些文件就是mydb.Properties、mydb.script、mydb.log等文件。其中demoDB是mydb的别名,可在连接数据库时使用。

    2、Hsqldb Web Server

    这种模式只能用在通过HTTP协议访问数据库服务器主机,采用这种模式唯一的原因是客户端或服务器端的防火墙对数据库对网络连接强加了限制。其他情况下,这种模式不推荐被使用。

    运行web服务器的时候,只要将刚才命令行中的主类(main class)替换成:org.hsqldb.WebServer

    3、Hsqldb Servlet

    这种模式和Web Server一样都采用HTTP协议,当如Tomcat或Resin等servlet引擎(或应用服务器)提供数据库的访问时,可以使用这种模式。但是Servlet模式不能脱离servlet引擎独立启动。为了提供数据库的连接,必须将HSQLDB.jar中的hsqlServlet类放置在应用服务器的相应位置。

    Web Server和Servlet模式都只能在客户端通过JDBC驱动来访问。Servlet模式只能启动一个单独的数据库。请注意做为应用程序服务器的数据库引擎通常不使用这种模式。

    连接到以Server模式运行的数据库

    当HSQLDB服务器运行时,客户端程序就可以通过hsqldb.jar中带有的HSQLDB JDBC Driver连接数据库。

    java 代码

    try{

    Class.forName("org.hsqldb.jdbcDriver") ;

    }catch(ClassNotFoundException e){

    e.printStackTrace();

    }

    Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/xdb","sa","");

    注:hsqldb的默认用户是sa密码为空。修改默认密码的方法我们将在工具使用部分做出介绍。

    二、In-Process模式

    In-Process模式又称Standalone模式。这种模式下,数据库引擎作为应用程序的一部分在同一个JVM中运行。对于一些应用程序来说,这种模式因为数据不用转换和通过网络的传送而使得速度更快一些。其主要的缺点就是默认的不能从应用程序外连接到数据库。所以当应用程序正在运行的时候,你不能使用类似于Database Manager的外部工具来查看数据库的内容。在1.8.0版本中,你可以从同一个JVM的一个线程里面来运行一个服务器实例,从而可以提供外部连接来访问你的In-Process数据库。

    推荐的使用In-Process模式方式是:开发的时候为数据库使用一个HSQLDB服务器实例,然后在部属的时候转换到In-Process内模式。

    一个In-Process模式数据库是从JDBC语句开始启动的,在连接URL中带有指定的数据库文件路径作为JDBC的一部分。例如,假如数据库名称为testdb,它的数据库文件位于与确定的运行应用程序命令相同的目录下,下面的代码可以用来连接数据库:

    Connection c = DriverManager.getConnection("jdbc:hsqldb:file:testdb", "sa", "");

    数据库文件的路径格式在Linux主机和Windows主机上都被指定采用前斜线("/")。所以相对路径或者是相对于相同分区下相同目录路径的表达方式是一致的。使用相对路径的时候,这些路径表示的是相对于用于启动JVM的shell命令的执行路径。

    三、Memry-Only数据库

    Memory-Only数据库不是持久化的而是全部在随机访问的内存中。因为没有任何信息写在磁盘上。这种模式通过mem:协议的方式来指定:

    Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:dbName", "sa", "");

    你也可以在server.properties中指定相同的URL来运行一个Memory-Only(仅处于内存中)服务器实例。

    注意事项:当一个服务器实例启动或者建立一个in-process数据库连接的时候,如果指定的路径没有数据库存在,那么就会创建一个新的空的数据 库。这个特点的副作用就是让那些新用户产生疑惑。在指定连接已存在的数据库路径的时候,如果出现了什么错误的话,就会建立一个指向新数据库的连接。为了解 决这个问题,你可以指定一个连接属性ifexists=true只允许和已存在的数据库建立连接而避免创建新的数据库,如果数据库不存在的话, getConnection()方法将会抛出异常。

    四、 工具的使用

    Hsqldb提供的主要的工具类:

    org.hsqldb.util.DatabaseManager

    org.hsqldb.util.DatabaseManagerSwing

    org.hsqldb.util.Transfer

    org.hsqldb.util.QueryTool

    org.hsqldb.util.SqlTool

    其中DatabaseManage和Sql Tool,只能用命令行参数来运行。你可以在命令行后面加上参数-?来查看这些工具可用的参数列表。其他工具可以通过DatabaseManager的主界面启动,便于交互式操作。

    为了便于操作,我们同样把这些工具启动的命令做成批处理文件。方法和前面我们所介绍的创建启动服务模式命令的方法一样。在这里我们再强调一次hsqldb.jar的位置,因为所有启动命令都是参照hsqldb.jar的位置编写的

    如果您觉得麻烦你也可以采用绝对路径编写命令。

    现在我们一起运行AWT版本的DatabaseManager工具,hsqldb.jar位于相对于当前路径的../lib下面,命令如下:

    Java -cp ../lib/hsqldb.jar org.hsqldb.util.DatabaseManager

    将命令保存为后缀名为bat的批处理文件,保存为DatabaseManager.bat,也可根据个人习惯命名。执行DatabaseManager.bat你将看到如下画面:。

    94cfa7cc-38fb-4f69-a796-4c2f84aa75b5

    现在对这个简洁的登录界面做个简单的介绍*_*

    Recent:选择你最近的登录方案,[可选]

    Setting Name:本次登录方案名称,如果本次登录成功,那么等你下次登录的时候在Recent下拉列表中将看到你的成功登录方案[可选]

    Type:登录模式,其中包括In-Memory模式、Standalone(In-process)模式、Server模式、WebServer模式... ...[必选]

    Driver:连接数据库的驱动程序[必选]

    URL:连接数据库的URL[必选]

    User:用户名[必选]

    Password:密码[ 除非密码为空]

    注:如果Type项选择Server模式或者WebServer模式需要你事先启动与之对应的服务模式。而Standalone(In- process)默认是不支持DatabaseManager连接的,具体原因我们已经在前面解释过。至于In-Memory可以随意登录,所有的操作数 据都不会记录在本地磁盘。而Type还有很多其他选项,具体的用法可以参考官方文档,位置在hsqldb目录\doc\guide\ guide.pdf。

    如果你想运行DatabaseManagerSwing也很简单,相信你已经想到了。我们只需要把启动DatabaseManager命令修改成:

    Java -cp ../lib/hsqldb.jar org.hsqldb.util. DatabaseManagerSwing

    两种工具的操作方法类似,这里就不再赘述。

    差点忘记,前面我说过要给出修改sa用户密码的方法。最后再占用大家一点点时间。当你用SA通过DatabaseManager登录成功后会出现如下界面:

    4de8829d-8f1a-493a-b37b-397d28cd4792

    在右上方的空白区域输入set password "newpassword" 点击执行即可。到这里我们对Hsqldb的简单介绍就结束了。

    本文参考自Hsqldb的官方文档,个人水平有限难免出现错误,

    1.bmp

    描述:

    文件大小:

    483 KB

    看过的:

    文件被下载或查看 1003 次

    2.bmp

    描述:

    文件大小:

    288 KB

    看过的:

    文件被下载或查看 957 次

    更多相关内容
  • HSQLDB

    2019-05-29 01:12:10
    NULL 博文链接:https://songwensheng.iteye.com/blog/855119
  • 要在非压缩(拆分)模式下使用嵌入式HsqlDB,使用您选择的HsqlDB驱动程序版本,该模式更加健壮。 要将数据从嵌入式数据库(odb文件)迁移到功能齐全的HsqlDB驱动程序: ,请参阅: 。 HsqlDBembeddedOOo仅在拆分...
  • HSQLDB 的 Docker 镜像。 发布:blacklabelops/hsqldb:latest 安装的软件: Java 8 数据库 SQL工具 让它简短 简而言之,使用此映像在您的开发环境中启动和停止一个简单的 HSQLDB。 $ docker run -d -p 9001:9001 --...
  • hsqldb-2.4.1.zip

    2019-05-12 16:04:08
    HSQLDB是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速的。具有Server模式,每个程序需要不同的命令来运行。
  • 下载Hsqldb安装包并将HSQLDB解压到你的特定安装位置(如:D:Hsqldb)。2:建立一个文件夹(如:hsqltest),然后到eclipse安装目录(如:我机子里E:eclipsepluginsorg.eclipse.swt.win32_3.0.0wswin32)下的swt.jar复制...
  • hsqldb-2.5.0.jar

    2021-08-09 18:50:14
    hsqldb数据库下载,很好用,简易的内存数据库,特别适合初学者。
  • 本文介绍如何开发将HSQLDB纯Java关系数据库服务器集成到EclipseWorkbench中的插件。尽管不如DB2功能强大,也不如MySQL流行,但HSQLDB(超音速SQL数据库)可以满足很大范围内Java应用程序的需要,因为它具有可扩展性...
  • HSQLDB Manager-开源

    2021-05-12 21:51:20
    HSQLDBManager是管理HSQL数据库的工具。 它的外观应类似于已知的DB-Manager(phpMyAdmin,DBVisualiser ...)。
  • hsqldb-2.5.0.zip

    2020-02-15 15:58:32
    开源数据库hsqldb最新版本2.5.0,含源代码及bin文件 Open-sourced database hsqldb2.5.0, including source code and bin file(stuctured in form of .BAT)
  • hsqldb-lib.zip

    2020-02-16 20:59:55
    hsqldb可能需要的额外jar包 Additional Jar files needed for hsqldb.
  • HSQLDB 文档

    2019-07-26 08:24:33
    NULL 博文链接:https://qingwaxw1980.iteye.com/blog/654855
  • HSQLDB.zip

    2019-07-12 23:13:43
    不用安装其他的数据库,直接启用内部内置的数据库demo。 HSQLDB_Client类用启动库 TestByJDBC设置参数 注意:修改自己电脑当前JDK版本
  • JPA基础 带有Eclipse Link和HSQLDB的Gradle + Eclipse + ... 使用以下命令行(进入HSQLDB的lib目录)启动数据库服务器:java -cp hsqldb.jar org.hsqldb.Server 要求Gradle解决依赖关系:gradle build 运行主类:App
  • hsqldb.jar

    2019-11-23 15:07:37
    用于连接Access的jar包,也可以从网上下载。这是我随便下载的一个
  • HSQLDB的使用

    2019-05-27 02:43:23
    NULL 博文链接:https://qidaoxp.iteye.com/blog/601219
  • hsqldb随tomcat启动

    2019-05-24 02:02:09
    NULL 博文链接:https://locao.iteye.com/blog/371790
  • jar包,官方版本,自测可用
  • hsqldb jdbc driver

    2014-09-02 11:43:11
    hsqldb jdbc driver适合于hsqldb
  • hsqldb-2.4.0.zip

    2019-07-31 14:55:21
    hsqldb-2.4.0
  • 测试数据库 用于实现 HSQLdb 以便为 JUnit 测试提供内存数据的小应用程序
  • 从零开始搭建天猫Springboot项目
  • 使用java写单机小程序或者测试项目的时候,使用hsqldb是一个不错的选择。介绍可以看这里:http://www.javaeye.com/topic/78887http://hi.baidu.com/mum0532/blog/item/b08c0c6d88e0faf9431694e5.html从官网下载的...

    使用java写单机小程序或者测试项目的时候,使用hsqldb是一个不错的选择。

    介绍可以看这里:

    http://www.javaeye.com/topic/78887

    http://hi.baidu.com/mum0532/blog/item/b08c0c6d88e0faf9431694e5.html

    从官网下载的压缩包,解压后的demo目录中,可以运行runManagerSwing,打开可视化管理界面(但没有可视化创建表,创建字段的功能)

    41664589_1.jpg

    连接的时候,先选择server模式,然后在下图的红框处输入启动服务的端口和数据库名称。例如jdbc:hsqldb:hsql://localhost:9002/test

    这里9002是我程序启动hsqldb的时候使用的端口,test是建立的数据库名称

    41664589_2.jpg

    HSQLDB创建数据库和基本的数据库访问:

    http://hi.baidu.com/hivemind/blog/item/83873bdf36611c1462279825.html

    HSLQDB的sql语法跟MySQL的略有不同,使得很郁闷啊~~开始我都不知道怎么初始化HSQLdb的数据

    HSQLDB和Hibernate结合的一个小例子:

    http://hi.baidu.com/hivemind/blog/item/2c77fb00830e5a16738b6506.html

    我自己写的一个Java类:(只需要加入hsqldb.jar即可)

    41664589_3.gif

    /*** 方便单机程序使用HSQL的工具类,包括启动,关闭,连接。数据库默认不加密,用户为sa,密码空

    *@author郑高强*/

    public class HSQL_Util {

    public static final int PORT = 9002;

    public static final String DB_NAME = "kenko"; //数据库文件名,同时也是本类中的数据库名 public static final String DB_PATH = "./db/";

    public static final String USER_NAME = "sa";

    public static final String PASSWORD = "";

    public static final int SERVER_MODE = 0;

    public static final int STAND_ALONE_MODE = 1; //In-Process public static int mode = SERVER_MODE; //记录当前用什么模式,开发时用Server,发布时用standalone

    /*** 启动数据库服务*/

    public static boolean startHSQL() {

    if (mode == SERVER_MODE) {

    Server server = new Server();//它可是hsqldb.jar里面的类啊。 server.setDatabaseName(0, DB_NAME);

    server.setDatabasePath(0, DB_PATH + DB_NAME);

    server.setPort(PORT);

    server.setSilent(true);

    server.start(); //自动多线程运行 System.out.println("hsqldb started...");

    } else if (mode == STAND_ALONE_MODE) {

    //standalone模式,打开连接就同时启动数据库,所以这里可以什么都不做 }

    try {

    Thread.sleep(800); //等待Server启动 } catch (InterruptedException e) {

    }

    return true;

    }

    /*** 关闭数据库服务*/

    public static boolean stopHSQL() {

    try {

    Statement statement = getConnection().createStatement();

    statement.executeUpdate("SHUTDOWN;");

    return true;

    } catch (SQLException ex) {

    Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

    return false;

    }

    }

    /*** 获取连接*/

    public static Connection getConnection() {

    Connection conn = null;

    try {

    Class.forName("org.hsqldb.jdbcDriver");

    if (mode == SERVER_MODE) {

    conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:" + PORT + "/" + DB_NAME, USER_NAME, PASSWORD);

    } else if (mode == STAND_ALONE_MODE) {

    conn = DriverManager.getConnection("jdbc:hsqldb:file:" + DB_PATH + DB_NAME, USER_NAME, PASSWORD);

    }

    } catch (ClassNotFoundException ex) {

    Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

    } catch (SQLException ex) {

    Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

    }

    return conn;

    }

    /*** 测试*/

    public static void main(String[] args) {

    HSQL_Util.mode = HSQL_Util.STAND_ALONE_MODE;

    HSQL_Util.startHSQL();

    Connection conn = HSQL_Util.getConnection();

    try {

    Statement statement = getConnection().createStatement();

    statement.executeUpdate("create table customer(id integer not null primary key,firstname varchar,lastname varchar)");

    for (int i = 10; i < 20; i++) {

    statement.executeUpdate("insert into customer values(" + i + ",'liu','zhaoyang')");

    }

    statement.close();

    } catch (SQLException ex) {

    Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

    }

    HSQL_Util.stopHSQL();

    }

    }

    41664589_3.gif

    运行上述的类,在项目目录,会生成一个db文件夹,里边有数据库的一些基本文件:

    41664589_4.jpg

    HSQL速度测试:

    41664589_3.gif

    String note = "XXXX"; //这里省略,实际是800个中文字 System.out.println(note.length());

    HSQL_Util.mode = HSQL_Util.STAND_ALONE_MODE;

    HSQL_Util.startHSQL();

    Connection conn = HSQL_Util.getConnection();

    try {

    Statement statement = getConnection().createStatement();

    statement.executeUpdate("create cached tablecustomer(id integer not null primary key,firstname varchar,lastname varchar)");

    for (int i = 1; i < 60000; i++) { //插入6万条数据用了43秒,生成262M的文件 statement.executeUpdate("insert into customer values(" + i + ",'" + note + "','zhaoyang')");

    }

    statement.executeQuery("select * from customer where id = 40"); //6万条数据用了9秒 statement.close();

    } catch (SQLException ex) {

    Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

    }

    HSQL_Util.stopHSQL();

    }

    41664589_3.gif

    使用HSQL的时候,就需要注意创建表用什么类型了!!!

    开始我不知道,使用了默认的Momery表,“create table” 测试了一下,速度慢得吐血。写6万条记录,用了五十多秒,而且只是写到3万多就崩溃了,内存溢出~~哈哈,其实也正常,十几M数据爆了~~然后从这3万个记录,select * from custemer where id = XX,用了几秒钟

    后来我再找方法,换成cached方法,create cached table试了一下,果然有效果,直接写6万个记录,没有爆,用了43秒。

    再select就用了9秒。相对而言,比momery表好一点。但看了一下数据文件,我~~~竟然生成了262M的数据文件!!!!!

    唉,我累了~~不玩了,HSQL没有想象中这么好用~~还是老老实实,用MySQL,或者自己写txt吧~~

    展开全文
  • 使用java写单机小程序或者测试项目的时候,使用hsqldb是一个不错的选择。介绍可以看这里:http://www.javaeye.com/topic/78887http://hi.baidu.com/mum0532/blog/item/b08c0c6d88e0faf9431694e5.html从官网下载的...

    使用java写单机小程序或者测试项目的时候,使用hsqldb是一个不错的选择。

    介绍可以看这里:

    http://www.javaeye.com/topic/78887

    http://hi.baidu.com/mum0532/blog/item/b08c0c6d88e0faf9431694e5.html

    从官网下载的压缩包,解压后的demo目录中,可以运行runManagerSwing,打开可视化管理界面(但没有可视化创建表,创建字段的功能)

    1360967166d713f5d26155a9b6da8e87.png

    连接的时候,先选择server模式,然后在下图的红框处输入启动服务的端口和数据库名称。例如jdbc:hsqldb:hsql://localhost:9002/test

    这里9002是我程序启动hsqldb的时候使用的端口,test是建立的数据库名称

    714ff6eec141a34ebcf4365563d0f703.png

    HSQLDB创建数据库和基本的数据库访问:

    http://hi.baidu.com/hivemind/blog/item/83873bdf36611c1462279825.html

    HSLQDB的sql语法跟MySQL的略有不同,使得很郁闷啊~~开始我都不知道怎么初始化HSQLdb的数据

    HSQLDB和Hibernate结合的一个小例子:

    http://hi.baidu.com/hivemind/blog/item/2c77fb00830e5a16738b6506.html

    我自己写的一个Java类:(只需要加入hsqldb.jar即可)

    /*** 方便单机程序使用HSQL的工具类,包括启动,关闭,连接。数据库默认不加密,用户为sa,密码空

    *@author郑高强*/

    public class HSQL_Util {

    public static final int PORT = 9002;

    public static final String DB_NAME = "kenko"; //数据库文件名,同时也是本类中的数据库名 public static final String DB_PATH = "./db/";

    public static final String USER_NAME = "sa";

    public static final String PASSWORD = "";

    public static final int SERVER_MODE = 0;

    public static final int STAND_ALONE_MODE = 1; //In-Process public static int mode = SERVER_MODE; //记录当前用什么模式,开发时用Server,发布时用standalone

    /*** 启动数据库服务*/

    public static boolean startHSQL() {

    if (mode == SERVER_MODE) {

    Server server = new Server();//它可是hsqldb.jar里面的类啊。 server.setDatabaseName(0, DB_NAME);

    server.setDatabasePath(0, DB_PATH + DB_NAME);

    server.setPort(PORT);

    server.setSilent(true);

    server.start(); //自动多线程运行 System.out.println("hsqldb started...");

    } else if (mode == STAND_ALONE_MODE) {

    //standalone模式,打开连接就同时启动数据库,所以这里可以什么都不做 }

    try {

    Thread.sleep(800); //等待Server启动 } catch (InterruptedException e) {

    }

    return true;

    }

    /*** 关闭数据库服务*/

    public static boolean stopHSQL() {

    try {

    Statement statement = getConnection().createStatement();

    statement.executeUpdate("SHUTDOWN;");

    return true;

    } catch (SQLException ex) {

    Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

    return false;

    }

    }

    /*** 获取连接*/

    public static Connection getConnection() {

    Connection conn = null;

    try {

    Class.forName("org.hsqldb.jdbcDriver");

    if (mode == SERVER_MODE) {

    conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:" + PORT + "/" + DB_NAME, USER_NAME, PASSWORD);

    } else if (mode == STAND_ALONE_MODE) {

    conn = DriverManager.getConnection("jdbc:hsqldb:file:" + DB_PATH + DB_NAME, USER_NAME, PASSWORD);

    }

    } catch (ClassNotFoundException ex) {

    Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

    } catch (SQLException ex) {

    Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

    }

    return conn;

    }

    /*** 测试*/

    public static void main(String[] args) {

    HSQL_Util.mode = HSQL_Util.STAND_ALONE_MODE;

    HSQL_Util.startHSQL();

    Connection conn = HSQL_Util.getConnection();

    try {

    Statement statement = getConnection().createStatement();

    statement.executeUpdate("create table customer(id integer not null primary key,firstname varchar,lastname varchar)");

    for (int i = 10; i < 20; i++) {

    statement.executeUpdate("insert into customer values(" + i + ",'liu','zhaoyang')");

    }

    statement.close();

    } catch (SQLException ex) {

    Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

    }

    HSQL_Util.stopHSQL();

    }

    }

    运行上述的类,在项目目录,会生成一个db文件夹,里边有数据库的一些基本文件:

    aaf08c7a1ce6fce9c5cc5e7875fcc523.png

    HSQL速度测试:

    String note = "XXXX"; //这里省略,实际是800个中文字 System.out.println(note.length());

    HSQL_Util.mode = HSQL_Util.STAND_ALONE_MODE;

    HSQL_Util.startHSQL();

    Connection conn = HSQL_Util.getConnection();

    try {

    Statement statement = getConnection().createStatement();

    statement.executeUpdate("create cached table customer(id integer not null primary key,firstname varchar,lastname varchar)");

    for (int i = 1; i < 60000; i++) { //插入6万条数据用了43秒,生成262M的文件 statement.executeUpdate("insert into customer values(" + i + ",'" + note + "','zhaoyang')");

    }

    statement.executeQuery("select * from customer where id = 40"); //6万条数据用了9秒 statement.close();

    } catch (SQLException ex) {

    Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

    }

    HSQL_Util.stopHSQL();

    }

    展开全文
  • NULL 博文链接:https://aperise.iteye.com/blog/1695560
  • 开源数据库软件hsqldb

    2019-03-01 16:22:31
    博文链接:https://newdebug.iteye.com/blog/80868
  • HSQLDB(HyperSQL DataBase)是一个使用 Java 语言编写的开源关系型数据库,支持嵌入式、客户端/服务器部署模式。本文介绍了 HSQLDB 的功能、下载安装、基本操作以及相关的学习资源。

    大家好,我是只谈技术不剪发的 Tony 老师。今天再给大家介绍一款基于 Java 的嵌入式关系型数据库:HSQLDB

    📝前文我们还介绍过另外两款基于 Java 的嵌入式关系型数据库:Apache DerbyH2

    HSQLDB 简介

    HSQLDB

    HSQLDB(HyperSQL DataBase)是一个使用 Java 语言编写的开源关系型数据库,遵循自由的 BSD 协议。很多开源和商业产品都内置了一个 HSQLDB 数据库,包括 Apache ManifoldCF、OpenOffice、LibreOffice、Kepler、JBoss、Volt DB、Mathematica、Jira、Confluence、TeamCity 等。

    HSQLDB 拥有 20 多年的开发历史,最初由 Thomas Mueller 创建,他也是另一个嵌入式数据库 H2 的创始人。目前,HSQLDB 的最新版本为 2.5.1(2020-06-29);源代码可以从 SourceForge 下载。HSQLDB 数据库的主要特点包括:

    • 基于对数据库理论和 SQL 标准的深入研究创建的原创产品;
    • 广泛支持 SQL: 2016 标准语法,包括大多数可选功能;
    • 广泛兼容其他数据库语法模式;
    • 为中小型数据库提供了非常快速的访问性能;
    • 三种事务控制模式,包括加锁(两阶段锁)和 MVCC 模式,支持 REPEATABLE READ、READ COMMITTED 以及 SERIALIZABLE 隔离级别;
    • 完全多线程支持;
    • 纯 Java 实现,jar 文件只有 1.5 MB 左右,支持 JRE 6 以上环境;
    • 广泛的 JDBC 接口支持,包括批量语句和滚动、可更新、可插入 ResultSet 功能,支持自定义的 Java 存储过程和函数;
    • 支持 SQL 触发器和 Java 触发器,支持触发器的同步执行和异步执行;
    • 支持 SQL 标准的全部基础数据类型,包括 TIMESTAMP WITH TIME ZONE、BINARY、BIT、BOOLEAN、 日期时间、INTERVAL、BLOB、CLOB 等,支持 ARRAY 对象,支持 SQL 计算列;
    • 支持自定义 DOMAIN 类型,包括类型约束;
    • 支持 system-versioned 时态表表,可以保存完整的数据变更历史;
    • 快速 SELECT、INSERT、DELETE、UPDATE 操作,MERGE 语句支持单个或多个 INSERT、UPDATE、DELETE 选项;
    • 内连接、左/右外连接以及全外连接,自然连接,USING 连接语法,LATERAL 连接和 UNNEST 操作符;UNION、EXCEPT、INTERSECT 集合操作符;
    • 标量子查询、行子查询、表子查询以及关联子查询,包括 IN、EXISTS、ANY、ALL 操作符;
    • 支持 WITH 递归查询(通用表表达式);
    • 支持视图和临时表,包括可修改的视图;
    • 支持主键、唯一约束和检查约束,支持外键参照完整性约束和级联操作;
    • ORDER BY、GROUP BY、HAVING、FETCH(LIMIT)以及 OFFSET 子句;
    • COUNT、SUM、MIN、MAX、AVG 以及统计聚合函数;
    • 支持 SQL 表达式,例如 CASE … WHEN … ELSE … 、NULLIF、BETWEEN、MATCHES 等;支持 INTERVAL 表达式,例如 (CURRENT_DATE - 3 MONTH);
    • 支持自增 IDENTITY 字段和序列;
    • 提供了大量的内置函数;
    • 支持事务控制语句 COMMIT、ROLLBACK 和 SAVEPOINT;
    • 每个 JVM 可以创建多个数据库,每个数据库中可以创建多个模式;
    • 支持 SQL 过程和函数,包括递归过程和函数;
    • 基于密码的数据库安全,GRANT 和 REVOKE 语句管理的用户权限和角色,表级 DELETE 权限和列级 SELECT 和 UPDATE 权限;
    • 丰富的 ALTER TABLE 命令,包括更改表的字段类型;
    • 完整的 INFORMATION SCHEMA 视图;
    • 查询优化器可以针对 AND、OR、IN 条件以及 ORDER BY、MAX、MIN 使用索引进行优化;
    • 内存表提供了最快的访问性能,磁盘表支持大量数据,支持外部文本表(例如 CSV 文件);
    • 快速 CLOB 和 BLOB 存储,最大 64 TB;磁盘表(CACHED TABLE)最大 8 TB,外部表最大 256GB;
    • 通过内部增量备份提供快速启动和关闭功能;
    • 支持在线和离线备份,支持数据库 SQL 脚本逻辑备份;
    • 支持嵌入式和客户端/服务器操作模式,可以用于 applets、只读介质(CD),其他 jar 文件内部、webstart 和嵌入式应用;
    • 支持三种客户端/服务器协议:HSQL、HTTP 以及 HSQL-BER;可以作为一个 HTTP web 服务器运行,包括 SSL 选项;
    • 支持 ODBC 连接;
    • 提供了一个强大的命令行管理工具 SqlTool,可以支持大部分主流数据库;
    • 提供了两个简单的图形管理工具,一个用于不同数据库管理系统之间相互转换的工具,以及一个用于运行 SQL 测试脚本的测试工具。

    让我们赶紧试用一下吧!

    下载安装

    打开 HSQLDB 官方网站提供的<Download>链接。

    download

    选择最新版本文件进行下载,解压缩之后的目录如下:

    目录

    安装目录包含了一下内容:

    • bin 目录包含了 Windows 系统下的实用脚本,以及如何在浏览器中嵌入 HSQLDB 的 HTML 文件;
    • build 目录包含了ant build.xml 脚本,Gradle build 文件以及 MSDOS CMD build 文件;
    • data 目录包含了数据库文件,默认为空;
    • doc 目录包含了各种文档;
    • lib 目录包含了运行 HSQLDB 和 GUI 工具的 hsqldb.jar 文件,以及 SqlTool 工具的 sqltool.jar 文件;
    • sample 目录提供了一些示例脚本和配置模板;
    • src 目录包含了所有的源代码;
    • testrun 目录包含了一些测试 HSQLDB 和 SqlTool 的脚本。

    最新版本的 HSQLDB 需要 Java 8 以上运行环境,可以点击下载安装并配置环境变量 JAVA_HOME,将 JDK 的 bin 目录添加到 PATH 环境变量,然后使用java -version查看当前 Java 版本。

    C:\Users\dongx> java -version
    java version "13.0.1" 2019-10-15
    Java(TM) SE Runtime Environment (build 13.0.1+9)
    Java HotSpot(TM) 64-Bit Server VM (build 13.0.1+9, mixed mode, sharing)
    

    接下来就可以运行 bin 目录下的 runManagerSwing.bat(Windows)脚本启动 HSQLDB 数据库管理工具,该工具可以通过 JDBC API 连接各种数据库。manager

    默认值 URL 连接的是内存数据库,点击下面的“OK”就可以连接 HSQLDB 数据库了。

    main

    其中,

    • File 菜单可以建立或者关闭连接,运行和保存脚本,保存结果,退出等;
    • View 可以用于设置界面显示;
    • Command 提供了快速命令输入和语法帮助;
    • Recent 记录了最近执行过的命令;
    • Options 提供了一些设置选项;
    • Tools 提供了实用工具,需要单独编译;
    • Schemas 可以选择显示的模式;
    • Help 提供了一些帮助信息。

    界面左侧是数据库的连接信息和对象,右侧是 SQL 命令区域和执行结果。

    执行 SQL 语句

    在右侧 SQL 命令区域输入以下命令创建一个测试表:

    create table test(id integer not null primary key, val varchar(50));
    

    点击“Execute SQL”运行命令创建表。sql
    此时,界面左侧增加了一个 TEST 表节点,命令区域下面显示了运行的结果。然后继续执行以下命令插入数据并查询结果:

    insert into test values (1, 'a'), (2,'b'), (3,'c');
    select * from test;
    

    📝Options 菜单提供了一个生成示例表的脚本 Insert test data。

    生成 DDL 语句

    在命令区域输入 SCRIPT 命令查看数据库的 DDL 语句。

    ddl
    SCRIPT 命令支持文件名选项,例如 SCRIPT ‘filename’ 可以将 DDL 语句保存到指定文件中,包括生成数据的 SQL 语句。

    📝除了 SCRIPT 命令之外,PERFORM EXPORT SCRIPT 和 PERFORM IMPORT SCRIPT 命令也可以用于导入导出数据库和表结构,具体可以参考官方文档

    断开数据库连接

    输入 DISCONNECT 命令,或者点击 File 菜单中的 Close Connection 断开当前数据库连接。

    关闭数据库

    输入 SHUTDOWN 命令关闭当前当前数据库,对于内存存储模式同时会销毁所有的对象。

    连接模式

    H2 支持两种不同的连接模式:嵌入式(In-Process)和服务器(Server)模式。所有的模式都支持内存存储、磁盘持久化存储以及 Java 资源文件存储(只读)。

    对于大多数应用,嵌入式模式的访问速度更快,因为数据不需要转换并通过网络传输;主要的缺点是默认情况下无法从应用程序外部连接数据库。

    服务器模式提供了最大的可访问性,数据库引擎运行在 JVM 中,打开一个或多个嵌入的数据库。它可以监听同一个服务器或来自网络的连接请求,并将这些连接转换为进程内部的数据库连接。大多数服务器模式中,服务端可以服务大量的数据库和客户端连接。

    开发环境同样推荐使用服务器模式,它运行在应用运行时通过其他工具查询数据库。根据连接协议的不同,服务器模式又可以分为三种:HyperSQL HSQL Server、HyperSQL HTTP Server 以及 HyperSQL HTTP Servlet。

    HyperSQL HSQL Server 时推荐的运行模式,速度最快。这种模式会使用专用的通信协议。以下示例使用该模式启动服务,包含了一个(默认)数据库,数据库文件名为“mydb.*”,公开名称为“xdb”(隐藏了文件名)。

    java -cp ../lib/hsqldb.jar org.hsqldb.server.Server --database.0 file:mydb --dbname.0 xdb
    

    命令行参数 --help 可以用于查看有效参数列表。

    HyperSQL HTTP Server 模式适合服务器只能通过 HTTP 协议访问的场景。使用该模式的唯一原因就是客户端或者服务器由于防火墙限制只能使用 HTTP 协议,其他情况都不应该使用这种模式。该模式提供了一个特殊的 web 服务器,允许 JDBC 客户端通过 HTTP 连接数据库;它也可以作为一个小型通用的静态页面服务器使用。

    如果想要运行 HTTP Server,可以将上面示例中的类名改成以下名称:

    ava -cp ../lib/hsqldb.jar org.hsqldb.server.WebServer --database.0 file:mydb --dbname.0 xdb
    

    命令行参数 --help 可以用于查看有效参数列表。

    HyperSQL HTTP Servlet 模式通用使用 HTTP 协议访问数据库,用于 Servlet 引擎或者应用服务器(Tomcat、Resin 等)提供数据库访问。该模式无法独立于 Servlet 引擎启动,HSQLDB jar 文件中的 Servlet 类需要安装到应用服务器中以提供连接服务,数据库文件路径使用应用服务器配置属性指定。

    HTTP Server 和 HTTP Servlet 模式都有可以通过 JDBC 驱动进行访问,但不提供 web 前端;HTTP Servlet 模式可以支持多个数据库。通常来说,在应用服务器中使用数据库引擎时通常不使用这种模式,而是通过进程内的方式连接数据库,或者使用单独的数据库服务器。

    📝关于这三种服务器模式的配置和连接方式,可以参考官方文档

    命令行客户端

    H2 数据库自带了一个命令行 Shell 工具,输入以下命令调用该工具:

    C:\Users\dongx>java -cp "C:\Program Files (x86)\H2\bin\h2-1.4.200.jar" org.h2.tools.Shell
    
    Welcome to H2 Shell 1.4.200 (2019-10-14)
    Exit with Ctrl+C
    [Enter]   jdbc:h2:tcp://localhost/~/test
    URL
    [Enter]   org.h2.Driver
    Driver
    [Enter]   sa
    User
    Password
    Connected
    Commands are case insensitive; SQL statements end with ';'
    help or ?      Display this help
    list           Toggle result list / stack trace mode
    maxwidth       Set maximum column width (default is 100)
    autocommit     Enable or disable autocommit
    history        Show the last 20 statements
    quit or exit   Close the connection and exit
    
    sql>
    

    按照提示输入数据库的连接信息即可。接下来就可以输入各种 SQL 语句了:

    sql> select now();
    NOW()
    2020-09-03 20:54:28.629717
    (1 row, 2 ms)
    

    输入 quit 或者 exit 可以退出客户端。

    Maven 依赖

    如果想要在自己的 Java 程序中使用 HSQLDB 数据库,可以添加以下 Maven 依赖:

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

    最新的版本配置可以查看 Maven Central

    资源文档

    如果想要进一步深入了解和学习 HSQLDB 数据库,可以参考以下资源:

    总结

    HSQLDB 是一款完全使用 Java 实现的关系型数据库,支持嵌入式、客户端/服务器部署模式。HSQLDB 数据库是一个成熟的产品,已经被大量开源和商业的软件作为嵌入式数据库使用。

    如果觉得文章对你有用,欢迎关注❤️、评论📝、点赞👍!

    展开全文

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 18,048
精华内容 7,219
关键字:

hsqldb