HSQLDB相关信息及用法汇总

时间:2022-06-03 12:37:06
运行模式 说明 启动命令 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

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

  1. 转:基于IOS上MDM技术相关资料整理及汇总

    一.MDM相关知识: MDM (Mobile Device Management ),即移动设备管理.在21世纪的今天,数据是企业宝贵的资产,安全问题更是重中之重,在移动互联网时代,员工个人的设备接入 ...

  2. 基于IOS上MDM技术相关资料整理及汇总

    (转自:http://www.mbaike.net/special/1542.html) 一.MDM相关知识:MDM (Mobile Device Management ),即移动设备管理.在21世纪 ...

  3. C&num;中DllImport用法汇总

    最近使用DllImport,从网上google后发现,大部分内容都是相同,又从MSDN中搜集下,现将内容汇总,与大家分享. 大家在实际工作学习C#的时候,可能会问:为什么我们要为一些已经存在的功能(比 ...

  4. ManagementClass类解析和C&num;如何获取硬件的相关信息

    在.NET的项目中,有时候需要获取计算机的硬件的相关信息,在C#语言中需要利用ManagementClass这个类来进行相关操作. 现在先来介绍一下ManagementClass类,首先看一下类的继承 ...

  5. MySQL查看数据库相关信息

    使用MySQL时,需要了解当前数据库的情况,例如当前的数据库大小.字符集.用户等等.下面总结了一些查看数据库相关信息的命令   1:查看显示所有数据库 mysql> show databases ...

  6. php http头设置相关信息

    HTTP 状态码 状态码用来告诉HTTP客户端,HTTP服务器是否产生了预期的Response. HTTP/1.1中定义了5类状态码, 状态码由三位数字组成,第一个数字定义了响应的类别 1XX 提示信 ...

  7. 在linux中查询硬件相关信息

    1.查询cpu的相关 a.查询CPU的统计信息 使用命令:lscpu 得到的结果如下: Architecture: x86_64 CPU op-mode(s): -bit, -bit Byte Ord ...

  8. Android根据文件路径使用File类获取文件相关信息

    Android通过文件路径如何得到文件相关信息,如 文件名称,文件大小,创建时间,文件的相对路径,文件的绝对路径等: 如图: 代码: public class MainActivity extends ...

  9. Linux sysinfo获取系统相关信息

    Linux中,可以用sysinfo来获取系统相关信息. #include <stdio.h> #include <stdlib.h> #include <errno.h& ...

随机推荐

  1. COM的永久接口

    COM的永久接口

  2. 使用正则表达式获取Sql查询语句各项&lpar;表名、字段、条件、排序&rpar;

    string text = "select * from [admin] where aa=1 and cc='b' order by aa desc "; Regex reg = ...

  3. unity工具IGamesTools之批量生成帧动画

    unity工具IGamesTools批量生成帧动画,可批量的将指定文件夹下的帧动画图片自动生成对应的资源文件(Animation,AnimationController,Prefabs) unity工 ...

  4. poj 2480 Longge&&num;39&semi;s problem 积性函数

    思路:首先给出几个结论: 1.gcd(a,b)是积性函数: 2.积性函数的和仍然是积性函数: 3.phi(a^b)=a^b-a^(b-1); 记 f(n)=∑gcd(i,n),n=p1^e1*p2^e ...

  5. 关于linux上postgresql的一些理解

    刚开始接触postgresql,安装后就有一个默认用户postgres,而且在启动postgresql后只能通过切换到linux的postgres用户才能登录数据库进行操作,和Mysql的登录认证居然 ...

  6. Tensorflow 大规模数据集训练方法

    本文转自:Tensorflow]超大规模数据集解决方案:通过线程来预取 原文地址:https://blog.csdn.net/mao_xiao_feng/article/details/7399178 ...

  7. WebPack打包后如何调试

    作为一个程序员每天的大部分工作就是调试自己写的程序,那我们使用了webpack后,所以代码都打包到了一起,给调试带来了麻烦,但是webpack已经为我们充分考虑好了这点,它支持生产Source Map ...

  8. elasticsearch5&period;0&period;1集群排错的几个思路总结

    1.首先查看集群整体健康状态 # curl -XGET http://10.27.35.94:9200/_cluster/health?pretty { "cluster_name&quot ...

  9. h5 实现定位

    直接上代码,代码使用了vue相关的语法 并且引入了dialog插件 ,使用时直接调用getLocation()方法就可以了! // 定位 function getLocation(){ console ...

  10. &lbrack;Leetcode 392&rsqb;判断子序列 Is Subsequence

    [思路] 判断s是否为t的子串,所以length(s)<=length(t).于是两个指针,一次循环. 将s.t转换为数组p1.p2. i为过程中s的匹配长度. i=0空串,单独讨论返回true ...