数据库环境配置和使用

首先从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,有空你可以研究一下他的源码。

作者:fengyifei11228 发表于2010-12-11 18:17:00 原文链接
阅读:4 评论:0 查看评论

转载于:https://www.cnblogs.com/fyfblog/archive/2010/12/11/2097148.html

hsqldb快速入门相关推荐

  1. Shiro第一个程序:官方快速入门程序Qucickstart详解教程

    目录 一.下载解压 二.第一个Shiro程序 1. 导入依赖 2. 配置shiro配置文件 3. Quickstart.java 4. 启动测试 三.shiro.ini分析 四.Quickstart. ...

  2. 计算机入门新人必学,异世修真人怎么玩?新手快速入门必备技巧

    异世修真人怎么快速入门?最近新出来的一款文字修仙游戏,很多萌新不知道怎么玩?进小编给大家带来了游戏新手快速入门技巧攻略,希望可以帮到大家. 新手快速入门攻略 1.开局出来往下找婆婆,交互给点钱,旁边有 ...

  3. Spring Boot 2 快速教程:WebFlux 快速入门(二)

    2019独角兽企业重金招聘Python工程师标准>>> 摘要: 原创出处 https://www.bysocket.com 「公众号:泥瓦匠BYSocket 」欢迎关注和转载,保留摘 ...

  4. Apache Hive 快速入门 (CentOS 7.3 + Hadoop-2.8 + Hive-2.1.1)

    2019独角兽企业重金招聘Python工程师标准>>> 本文节选自<Netkiller Database 手札> 第 63 章 Apache Hive 目录 63.1. ...

  5. 《iOS9开发快速入门》——导读

    本节书摘来自异步社区<iOS9开发快速入门>一书中的目录,作者 刘丽霞 , 邱晓华,更多章节内容可以访问云栖社区"异步社区"公众号查看 目 录 前 言 第1章 iOS ...

  6. BIML 101 - ETL数据清洗 系列 - BIML 快速入门教程 - 序

    BIML 101 - BIML 快速入门教程 做大数据的项目,最花时间的就是数据清洗. 没有一个相对可靠的数据,数据分析就是无木之舟,无水之源. 如果你已经进了ETL这个坑,而且预算有限,并且有大量的 ...

  7. python scrapy菜鸟教程_scrapy学习笔记(一)快速入门

    安装Scrapy Scrapy是一个高级的Python爬虫框架,它不仅包含了爬虫的特性,还可以方便的将爬虫数据保存到csv.json等文件中. 首先我们安装Scrapy. pip install sc ...

  8. OpenStack快速入门

    OpenStack云计算快速入门(1) 该教程基于Ubuntu12.04版,它将帮助读者建立起一份OpenStack最小化安装.我是五岳之巅,翻译中多采用意译法,所以个别词与原版有出入,请大家谅解.我 ...

  9. Expression Blend实例中文教程(2) - 界面快速入门

    上一篇主要介绍Expression系列产品,另外概述了Blend的强大功能,本篇将用Blend 3创建一个新Silverlight项目,通过创建的过程,对Blend进行快速入门学习. 在开始使用Ble ...

最新文章

  1. php时间处理类,PHP常见的日期处理
  2. 关于团队建设,穆帅能教我们什么?
  3. 第三周项目4顺序表应用2 删除元素在[x,y]之间的所有元素
  4. 【KVM系列03】KVM的I/O 全虚拟化和准虚拟化
  5. python discover()没有加载测试用例_对python_discover方法遍历所有执行的用例详解
  6. 前端学习(1343):集合关联
  7. angular2 学习笔记 ( unit test 单元测试 )
  8. 佳士得于5月19日至27日以NFT形式拍卖安迪·沃霍尔作品
  9. HashMap在Jdk1.7和1.8中的实现
  10. GitHub 标星 10,000+,Apache 顶级项目 ShardingSphere 的开源之路
  11. pb中控件变颜色_基于GDI+技术开发工业仪表盘控件
  12. Java中方法与数组
  13. 2021年第十二届蓝桥杯javaB组真题及部分答案
  14. 下载苹果APP历史版本
  15. Unity Mecanim动画的实现(一):基本程序
  16. java中rtf转化为html的第三方工具,java .rtf文件转html
  17. activemq-messages-dequeud-but-not-consumed
  18. python爬取豆瓣top250信息并存入数据库中 | sqlite3
  19. MongoDB索引原理及实践
  20. Java项目:毕业论文管理系统(java+SSM+JSP+Tomcat+mysql)

热门文章

  1. @classmethod的使用
  2. C++中时间相关函数的使用
  3. TensorFlow第八步 Nesterov's accelerated gradient descent+L2 regularization
  4. Opencv--resize函数五种插值算法实现
  5. centos pip命令安装mysql_centos下pip安装mysql_python报错mysql_config not found
  6. 设计模式学习笔记——享元(Flyweight)模式
  7. php正则表达式以及正则函数详解
  8. 【编撰】Directfb 深入 002 DirectFB内存分配与管理:surface pool
  9. 【实践驱动开发3-005】TI WL1835MODCOM8 在android的移植 - SDIO and wifi 基础
  10. 吉林省计算机科学与技术专业测评,我校计算机科学与技术、英语两个专业在吉林省专业综合评价中获得可喜成绩...