HSQLDB相关信息及用法汇总

 

运行模式 说明 启动命令 JDBC例
内存(Memory-Only)模式 所有数据都在内存里操作。应用程序退出后则数据被销毁。
无需另外启动HSQLDB Server
启动方式1:通过程序中首次调用Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:myDbName", "sa", "");时
启动方式2:你也可以在server.properties中指定相同的URL来运行一个Memory-Only(仅处于内存中)服务器实例。
jdbc:hsqldb:mem:myDbName

进程In-Process(Standalone)模式

数据库引擎作为应用程序的一部分在同一个JVM中运行

从应用程序启动数据库。因为所有数据被写入到文件中,所以即使应用程序退出后,数据也不会被销毁。
无需另外启动HSQLDB Server
跟Memory-Only模式一样,In-Process不需要另外启动,通过DriverManager.getConnection(jdbcUriName, "sa", "");方式既可启动
数据库文件的路径格式在Linux主机和Windows主机上都被指定采用前斜线(”/”)
jdbc:hsqldb:file:/C:/mydb/myDbName jdbc:hsqldb:file:/opt/db/myDbName
jdbc:hsqldb:file:myDbName

 

服务器模式 该模式下HSQLDB跟其他数据库服务器一样,以服务器的形式被启动。 通过java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 myDbName之类的命令启动HSQLDB守护进程。 jdbc:hsqldb:hsql://localhost:9001/myDbName
Web服务器模式 该模式HSQLDB以WEB服务器的形式启动,并通过HTTP协议接受客户端命令。从1.7.2开始,WEB服务器模式的HSQLDB开始支持事务。 java -cp ../lib/hsqldb.jar org.hsqldb.WebServer -database.0 mydb -dbname.0 myDbName -

 

 

http://blog.csdn.net/youlianying/article/details/4217292

 

HSQLDB可以采用几种不同的方式运行。不过可以大致分为Serer模式和In-Process(进程内模式,也称之为Standalone(独立)模式)。对于每种模式,Jar中都有相应的子程序来运行HSQLDB。

每个HSQLDB数据库包含了2到5个命名相同但扩展名不同的文件,这些文件位于同一个目录下。例如,名位“test”的数据库包含了以下几个文件: test.properties test.script test.log test.data test.backup

properties文件描述了数据库的基本配置。
script文件记录了表和其它数据库对象的定义,此外还有non-cached(无缓冲)表的数据。
log文件是用来记录数据库的变动,它在HSQLDB正常关闭的时候会被移除掉。否则(在非正常退出的时候),它将用来在下次启动HSQLDB时重复“test.log”中记录的更新操作.
data文件包含了cached(缓冲)表的数据。
backup文件是将data文件压缩备份,它包含了data文件上次的最终状态数据。所有这些文件都是必不可少的,千万不可擅自删除。 但如果你的数据库没有缓冲表(cached table),test.data和test.backup文件是不会存在。此外,HSQLDB数据库可以链接到磁盘上任何地方任何格式的文本文件,比如CSV 列表。
lck文件也可以用来记录数据库是否被打开,它在HSQLDB正常退出的时候会被移除。有些情况下,HSQLDB会生成test.data.old ”文件,但随后会被删除掉。
http://blog.itpub.net/47598/viewspace-22397/

java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 testdb -dbname.0 testdbname
[-database.0 ]、 [dbname.0]为什么在后面加[0]。_... ...我们不是在前面说服务模式运行的时候可以指定10个数据库吗,如有多个数据库,则继续写命令行参数-database.1 aa -dbname.1 aa -database.2 bb-dbname.2 bb ... ...
http://cxh61207.iteye.com/blog/904444

in-process(standalone)模式:

这种模式的特点有2个。
第一个特点,顾名思义,standalone。也就是这个数据库是可以不依赖其它任何东西,独立存在,包括数据库引擎。和in-memory模式相比,这种模式的数据是可以持久化的,存在形式就是几个文件。和server方式比,要使用这种模式下的数据库不需要启动任何的server或者监听。
第二个特点,同样可以顾名思义,in-process。这种模式下,数据库引擎和应用程序跑在一个jvm中。对大部分应用,这种模式可以加快速度,因为数据不再需要在网络中传输。但是这种方法也有个缺点,就是process之外的程序,比如database manager,无法看到数据库中的数据。

hsqldb官方推荐:开发的时候用server模式,部署到实际生产环境的时候才用standalone模式。
缺省时,数据也是保存在memory中的,如果想要持久化数据,需要在关闭vm之前执行hsqldb的命令 SHUTDOWN。 
http://pupi.iteye.com/blog/45272
http://blog.csdn.net/luxideyao/article/details/19834959
http://maimode.iteye.com/blog/1415644
http://www.cnblogs.com/kenkofox/archive/2010/12/01/1893782.html

内存模式:

package db.hsqldb;

import java.sql.*;

public class HsqldbDemo {

    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        // 加载HSQLDB的JDBC驱动
        Class.forName("org.hsqldb.jdbcDriver");
        // 在内存中建立数据库memdb,用户名为sa,密码为空
        Connection conn = DriverManager.getConnection("jdbc:hsqldb:mem:memdb", "sa", "");
        Statement stat = conn.createStatement();
        // 新建数据表
        stat.executeUpdate("create table person(NAME VARCHAR(20), AGE INTEGER,estate DECIMAL(15,6))");
        System.out.println("create TABLE:person OK");
        // 插入数据
        String sql1 = "INSERT INTO person VALUES('TPP',22,0.3)";
        String sql2 = "INSERT INTO person VALUES('WTO','25',0.5)";
//        stat.executeUpdate(sql1);
//        stat.executeUpdate(sql2);
        conn.setAutoCommit(false);
        stat.addBatch(sql1);
        stat.addBatch(sql2);
        stat.executeBatch();
        conn.commit();
        conn.setAutoCommit(true);

        System.out.println("insert data into TABLE:person OK!");
        conn.close();
        // stat.execute("SHUTDOWN");
        conn = DriverManager.getConnection("jdbc:hsqldb:mem:memdb", "sa", "");
        // 查询数据
        PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM person");
        ResultSet rs = pstmt.executeQuery();
        ResultSetMetaData rsmd = rs.getMetaData();
        while (rs.next()) {
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                System.out.print(rsmd.getColumnLabel(i) + ":" + rs.getString(i) + "   ");
            }
            System.out.println();
        }
    }
}

Output:

create TABLE:person OK
insert data into TABLE:person OK!
NAME:TPP   AGE:22   ESTATE:0.300000
NAME:WTO   AGE:25   ESTATE:0.500000   

Server模式:

目录结构:
│  runServer.bat

├─data
└─lib
        hsqldb.jar

runServer.bat:

cd data
@java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server -port 9001 -database.0 file:../data/mydb -dbname.0 mydb

 

package db.hsqldb;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.SQLException;
import java.sql.Statement;

public class HsqlDemo {
    public static void main(String[] args) throws ClassNotFoundException, SQLException {
        Class.forName("org.hsqldb.jdbcDriver");
        Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9001/mydb", "sa", "");
        System.out.println("Connected db success!");
        String sql = "CREATE TABLE TBL_USERS(ID INTEGER, NAME VARCHAR(20), BIRTHDAY DATE);";
        Statement st = conn.createStatement();
        st.execute(sql);
        sql = "INSERT INTO TBL_USERS(ID, NAME, BIRTHDAY) VALUES ('1', 'ADMIN', SYSDATE);";
        st.executeUpdate(sql);
        PreparedStatement pstmt = conn.prepareStatement("SELECT * FROM TBL_USERS");
        ResultSet rs = pstmt.executeQuery();
        ResultSetMetaData rsmd = rs.getMetaData();
        while (rs.next()) {
            for (int i = 1; i <= rsmd.getColumnCount(); i++) {
                System.out.print(rsmd.getColumnLabel(i) + ":" + rs.getString(i) + "   ");
            }
            System.out.println("");
        }
    }
}

 

java.sql.ResultSet
getString

String getString(int columnIndex)
                 throws SQLException
Retrieves the value of the designated column in the current row of this ResultSet object as a String in the Java programming language.

 

Parameters:
columnIndex - the first column is 1, the second is 2, ...
Returns:
the column value; if the value is SQL NULL, the value returned is null //需要使用null==value来判断这个字段的值是否存在
Throws:
SQLException - if the columnIndex is not valid; if a database access error occurs or this method is called on a closed result set

 

时间: 2024-10-25 03:23:20

HSQLDB相关信息及用法汇总的相关文章

[20111214]汇总11GR2 Deferred Segment Creation一些相关信息.txt

11G R2引入了Deferred Segment Creation的新特性,在建立空表时并不分配空间.这样对于一些系统能节省许多空间.但是也可能遇到一些问题,我把这段时间看到关于这个方面的信息做一个汇总. 1.sys用户不受这个限制: 测试例子:sqlplus sys as sysdbaSQL> create table t1 (a number);Table created.SQL> select  table_name ,segment_created from user_tables

php获取服务器操作系统相关信息的方法_php技巧

本文实例讲述了php获取服务器操作系统相关信息的方法.分享给大家供大家参考,具体如下: 下面是PHP获取当前服务器信息的基本语句. PHP程式版本: <?PHP echo PHP_VERSION; ?> ZEND版本: <?PHP echo zend_version(); ?> MYSQL支持: <?php echo function_exists (mysql_close)?"是":"否"; ?> MySQL数据库持续连接 :

PHP获取音频文件的相关信息

  这篇文章主要介绍了PHP获取音频文件的相关信息的相关资料,非常的实用,有需要的小伙伴可以参考下. 项目需求:现在有一个音频文件上传的功能,在上传后PHP需要获取这个音频文件的相关信息,例如:时长等,由于这个文件是放在买的空间上的,没有像ffmpeg这样的扩展来处理,那么PHP能不能获取到这些信息? 下面是之前在项目中用到的一个用PHP进行音频文件头部信息的读取与写入操作的实现,主要针对 WMA 和 MP3 两种格式,供参考. ? 1 2 3 4 5 6 7 8 9 10 11 12 13 1

JSON简介以及用法汇总_javascript技巧

JSON(JavaScript Object Notation)即JavaScript对象表示法,是一种轻量级的数据交换格式.它非常便于编程人员对数据的处理,也便于机器对数据的解析和生成,应用非常广泛. JSON是一种轻量级的数据交换格式,某个JSON格式的文件内部譬如可以长成这样: { "name": "hanzichi", "sex": "male" } 看起来都是key-value的键值对,很像js的对象吧?没错,但同时

jqGrid用法汇总(全经典)_jquery

支持多种类型的数据集合作为数据源 jqGrid可以绑定三种类型的数据:XML,JSON和数组.使用不同的数据类型主要是设置datatype属性,它的值分别为'xml','json','local'(数组) $("#grid1").jqgrid( ........ datatype: "xml", ........ ); 下面则列举各种数据类型的格式 XML格式: <rows> <page></page> <total>

PHP获取音频文件的相关信息_php实例

项目需求:现在有一个音频文件上传的功能,在上传后PHP需要获取这个音频文件的相关信息,例如:时长等,由于这个文件是放在买的空间上的,没有像ffmpeg这样的扩展来处理,那么PHP能不能获取到这些信息? 下面是之前在项目中用到的一个用PHP进行音频文件头部信息的读取与写入操作的实现,主要针对 WMA 和 MP3 两种格式,供参考. <?php // AudioExif.class.php // 用PHP进行音频文件头部信息的读取与写入 // 目前只支持 WMA 和 MP3 两种格式, 只支持常用的

c++-本地电脑连接着设备,我想远程用C++编的控制软件控制这台设备,怎样才能获得这台设备的相关信息?

问题描述 本地电脑连接着设备,我想远程用C++编的控制软件控制这台设备,怎样才能获得这台设备的相关信息? 本地电脑连接着设备,我想远程用C++编的控制软件控制这台设备,怎样才能获得这台设备的相关信息? 解决方案 拿到设备相应的api接口即可,进行对应的编程控制. 解决方案二: http://blog.csdn.net/ouyang_linux007/article/details/7637141

通过runtime获取对象相关信息

通过runtime获取对象相关信息 在这里,本人给大家提供一个runtime关于NSObject的扩展,用来显示各种NSObject中的信息,这有助于你来分析类的组成:) 先准备以下类供测试: Model.h 与 Model.m // // Model.h // Runtime // // Copyright (c) 2014年 Y.X. All rights reserved. // #import <Foundation/Foundation.h> typedef enum : NSUIn

WEB设计中的排版 如何便于用户高效、准确获取相关信息

首先谈一下"Metro"--由微软公司开发内部名称为" typography-based design language"(基于排版的设计语言). Metro是基于瑞士平面设计的设计原则(清晰,真实,美观),来源于交通指示牌.生活中人们行色匆匆,更需要提供快速,简洁,直接,明确的设计.现在的互联网又何尝不是如此,快捷获取信息的同时,信息泛滥.庞杂无序,简洁之风深入人心--减少元素,以显现本质.良好的排版有助于Web设计更加简洁有效. 概念: 排版就是将有限的视觉元素