问答文章1 问答文章501 问答文章1001 问答文章1501 问答文章2001 问答文章2501 问答文章3001 问答文章3501 问答文章4001 问答文章4501 问答文章5001 问答文章5501 问答文章6001 问答文章6501 问答文章7001 问答文章7501 问答文章8001 问答文章8501 问答文章9001 问答文章9501

hsqldb数据库要怎么用

发布网友 发布时间:2022-04-30 00:08

我来回答

3个回答

懂视网 时间:2022-04-30 04:29

中指定相同的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.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 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", "username", "password");
 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");
 // 插入数据
 stat.executeUpdate("INSERT INTO person VALUES(‘TPP‘,22,0.3)");
 stat.executeUpdate("INSERT INTO person VALUES(‘WTO‘,‘25‘,0.5)");
 System.out.println("insert data into TABLE:person OK!");
 conn.close();
 // stat.execute("SHUTDOWN");
 conn = DriverManager.getConnection("jdbc:hsqldb:mem:memdb", "username", "password");
 // 查询数据
 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("");
 }
 }
}


 

HSQLDB相关信息及用法汇总

标签:

热心网友 时间:2022-04-30 01:37

Hsqldb是一个开放源代码的JAVA数据库,其具有标准的SQL语法和JAVA接口,它可以自由使用和分发,非常简洁和快速的。具有Server模式,进程内模式(In-Process)和内存模式(Memory-Only)三种。运行Hsqldb需要hsqldb.jar包, 它包含了一些组件和程序。每个程序需要不同的命令来运行。它位于项目的lib目录下,在介绍这些模式之前需要了解一些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文件是不会存在。

热心网友 时间:2022-04-30 02:55

百度百科:http://ke.baidu.com/view/2194167.htm
官网:http://hsqldb.org/
中文文档作者博客:http://hsqldb.bokee.com/(推荐)
数据库环境配置和使用首先从http://www.hsqldb.org/下载一个hsqldb的稳定版本,解压后可以浏览解压目录下的index.html,它描述了各个目录所包含内容,在doc段里有一个重要的链接User Guide: index.html,有空好好研究吧!

数据库实例创建在hsqldb的管理中,如果启动的数据库文件不存在,就新建该数据库文件。
Hsldb启动Hsqldb的启动模式有三种主要模式,其他参见User Guide:
l Server

该模式就像启动mysql、oracle等数据库一样,数据库启动后作为一个服务存在,其他数据库工具可以通过jdbc的方式访问他,这是我们最熟悉的模式。启动脚本如下:
java -cp hsqldb.jar org.hsqldb.Server -database.0 ./db/test -dbname.0 test

后面参数:
-database.n 数据库文件(其他数据库中对应:数据库实例)地址,支持相对路径,注意使用反斜杠
-dbname.n 数据库文件的访问同义词,就是用这个名称访问数据库的
server模式jdbc访问方式:
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9002/test", "sa", "");

可以启动多个数据库文件,例如:
java -cp hsqldb.jar org.hsqldb.Server -database.0 ./db/test0 -dbname.0 test0 -database.1 ./db/test1 -dbname.1 test1

l In-Process (Standalone)

该模式更接近于文件型数据库这个概念,当你访问时他就启动,这种模式访问速度最快,缺点是只能当前访问线程使用,其他数据库工具不能同时访问。例如jdbc访问:
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "sa", "");

l In-Memory

顾名思义,内存中的数据库,你所做的数据库ddl、dml不会写入磁盘,也是当你访问时他就启动。例如jdbc访问:
Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", "");

Hsqldb 管理工具hsqldb.jar中自带了一个数据库管理工具:DatabaseManagerSwing(Swing界面,还有一个是Awt界面的:DatabaseManager),该工具可以通过jdbc访问多种数据库。
我们使用server模式启动hsqldb数据库,然后运行下列命令:
java -cp hsqldb.jar org.hsqldb.util.DatabaseManagerSwing

就可打开主界面

连接时注意选择:Type,应该是HSQL Database Engine Server

对于第一次使用可以使用它自带的功能,创建一些测试表,挺好的吧:

好了你就可以写些语法数据库语法了:

你可以直接关闭它但数据库不受影响,仍然启动着。

Hsldb关闭对于任何一种启动模式,都可以在输入sql脚本的状态输入:SHUTDOWN 或 SHUTDOWN COMPACT 语法来关闭数据库。
对于In-process和In-memory这两种模式只要所有的连接关闭了,数据库也就关闭了。

Server模式参数设置在server模式下可以设置一些参数,主要的例如访问端口,可以参见User Guide的第四章高级属性,一般我们可以在启动脚本的目录下编辑一个server.properties,内容如下:
server.port=9002

server.trace=true

Sqltool工具使用

在目录src\org\hsqldb\sample下有一个sqltool.rc文件,将其拷贝到工具使用命令目录中,修改如下片断:
urlid test

url jdbc:hsqldb:hsql://localhost:9002/test

username sa

password

其中urlid就是启动hsqldb的参数-dbname.0 test

然后使用如下命令:
java -jar hsqldb.jar --sql "select * from customer" --rcfile sqltool.rc test

大家可以通过“java -jar hsqldb.jar –help”看看其他的参数

好了给大家一个整理的压缩包,别忘了装jdk1.4

在web应用中嵌入hsqldb
写一个Listener
将hsqldb嵌入到web应用首要解决的问题是数据库的启动和关闭问题,参考springside项目的方法加入一个容器级的Listener,代码如下:
import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.Statement;

import javax.servlet.ServletContextEvent;

import javax.servlet.ServletContextListener;

import org.apache.commons.lang.StringUtils;

import org.apache.log4j.Logger;

import org.hsqldb.Server;

/**

* 该类的职责是在WebApp启动时自动开启HSQL服务. 依然使用Server方式,不受AppServer的影响.

*

* @author frank

* @author calvin

*/

public class HsqlListener implements ServletContextListener {

protected Logger logger = Logger.getLogger(getClass());

/*

* (非 Javadoc)
*

* @see javax.servlet.ServletContextListener#contextInitialized(javax.servlet.ServletContextEvent)

*/

public void contextInitialized(ServletContextEvent sce) {

logger.info(" ============= HsqlListener initialize...");

// 获得数据库文件访问路径
String path = getDbPath(sce);

if (!path.endsWith("/"))

path = path + "/";

if (StringUtils.isEmpty(path)) {

logger.info(" ============= Can't get hsqldb.path from web.xml Context Param");

return;

}

logger.debug("hsqldb_path:" + path);

// 数据库文件名
String dbName = sce.getServletContext().getInitParameter("hsql.dbName");

if (StringUtils.isEmpty(dbName)) {

logger.info(" ============= Can't get hsqldb.dbName from web.xml Context Param");

return;

}

// 数据库访问端口
int port = -1;

try {

port = Integer.parseInt(sce.getServletContext().getInitParameter("hsql.port"));

} catch (Exception e) {

e.printStackTrace();

return;

}

// 启动数据库
startServer(path, dbName, port);

}

/**

* 获得数据库文件访问路径
*

* @param sce

* @return

*/

private String getDbPath(ServletContextEvent sce) {

String path = sce.getServletContext().getInitParameter("hsql.dbPath");

if (path.startsWith("{user.home}")) {

path = path.replaceFirst("\\{user.home\\}", System.getProperty("user.home").replace('\\', '/'));

}

if (path.startsWith("{webapp.root}")) {

path = path.replaceFirst("\\{webapp.root\\}", sce.getServletContext().getRealPath("/").replace('\\', '/'));

}

return path;

}

/**

* 启动数据库
*

* @param dbPath

* @param dbName

* @param port

*/

private void startServer(String dbPath, String dbName, int port) {

Server server = new Server();

server.setDatabaseName(0, dbName);

server.setDatabasePath(0, dbPath + dbName);

if (port != -1)

server.setPort(port);

server.setSilent(true);

server.setTrace(true);

server.start();

logger.info(" ============= hsqldb started...");

// 等待Server启动
try {

Thread.sleep(800);

} catch (InterruptedException e) {

e.printStackTrace();

}

}

/*

* (非 Javadoc)
*

* @see javax.servlet.ServletContextListener#contextDestroyed(javax.servlet.ServletContextEvent)

*/

public void contextDestroyed(ServletContextEvent sce) {

logger.info(" ============= HsqlListener destroyed...");

Connection conn = null;

try {

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

conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9002/weed", "sa", "sa");

Statement stmt = conn.createStatement();

stmt.executeUpdate("SHUTDOWN;");

logger.info(" ============= hsqldb shutdown...");

} catch (Exception e) {

e.printStackTrace();

}

}

}

增加web.xml配置web.xml配置增加如下:


<!--HSQLDB Listener的参数,随WebApp启动停止的Listener

{user.home} System.getProperty("user.home")

{webapp.root} servletContext.getRealPath("/")

-->

<context-param>

<param-name>hsql.dbPath</param-name>

<param-value>{webapp.root}/WEB-INF/dbms/db</param-value>

</context-param>

<context-param>

<param-name>hsql.dbName</param-name>

<param-value>weed</param-value>

</context-param>

<context-param>

<param-name>hsql.port</param-name>

<param-value>9002</param-value>

</context-param>



<!--

控制HSQLDB随Web App 启动停止

-->

<listener>

<listener-class>test.HsqlListener</listener-class>

</listener>

好了,你现在可以像访问mysql、oracle等其他数据库一样配置jdbc连接访问hsqldb了,在HsqlListener中有一个类org.hsqldb.Server,有空你可以研究一下他的源码。
声明声明:本网页内容为用户发布,旨在传播知识,不代表本网认同其观点,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:11247931@qq.com
玉米仁子饭产自哪里 中国期货交易所的交易品种有哪些? 历史要怎么读,有啥诀窍 高中历史诀窍 年终会活动策划方案 深度解析:第一财经回放,探索财经新风向 逆水寒手游庄园怎么邀请好友同住 逆水寒手游 逆水寒不同区可以一起组队吗? 逆水寒手游 逆水寒怎么进入好友世界? 逆水寒手游 逆水寒怎么去别人的庄园? 机械革命你的电脑未能正确启动? 机械革命笔记本如何win7如何升级win10 USB供电PC音响的功放芯片那个好的,大家给点意见吧。 为什么机械革命的笔记本总是弹出卸载或更改提示信息 功放LM3886芯片与TpA6513芯片哪款好? LM3886、TA2022、TA3020这三款功放芯片哪个音质更好些? hifi功放芯片哪种比较好 机械革命win7配置update失败 比较先进的数字功放芯片有哪些?自己想搭一个数字功放,跪求帮忙! 机械革命x6关机自动重启 机械革命刚买为什么有一个自动重启项老是出现? 求书名 主攻文。讲的是攻在末世唯一一位黑火异能者。不知道什么原因死了,然后重生到,几百年 洛克王国求以下宠物PK配招,图片我已经发出来了,就看各位怎么解答了,求高手。 口袋妖怪配招 洛克王国电弧猫配招。 口袋妖怪黑白2晴天队配队求指点 windows10以太网怎样连接不上? 口袋妖怪晴天战队的精灵及配招是什么? 口袋妖怪叶绿386急求以下精灵的配招——高手帮帮忙吧 关于违章建筑事件的网上举报办法有哪些? - 信息提示 - 信息提示 求toshi和菊池 近亲1-3,有中文字幕的 哪里能下到法律与秩序之犯罪倾向全剧带中文字幕的呢 翻译专业,大一,需要做翻译练习题吗 有没有人有toshi和菊池的近亲~中文字幕啊啊啊啊 日本 近亲 猜人游戏 要中文字幕的,有好像15集 谢谢 求一些带中文字幕的,成,人,看的片子,,谢了 求toshi和菊池的近亲三部,要有中文字幕!谢谢 小的摄像头360°无死角的能看多远啊拉下来能看到外面吗? 求toshi小弟的近亲3部等作品,最好有中文字幕。 toshi近亲1.2中文字幕版 我的烤箱是索利斯S-E0180,请问下做6寸戚风蛋糕要分别用多少温度,烤多少时间? 求近亲1 的中文字幕。。非常感谢! 526812175@qq.com 刚接触Word时间不长的新手怎样用它来快速打表格? - 信息提示 长帝CKF25b烤六寸戚风蛋糕温度要设定多少烤多少时间呀? 学校的摄像头能照到的范围是多少 美的烤箱md-38aa这款烤戚风蛋糕六寸的要多少度多长时间? 车载摄像头360度全方便监控能四面八方全部看清楚吗?当车熄火了还能录像摄影多久?