文档章节

Java HsqlDB的初步使用和技巧总结

IamOkay
 IamOkay
发布于 2015/04/25 13:16
字数 1592
阅读 32
收藏 0
点赞 0
评论 0

HSQLDB是一个轻量级的纯Java开发的开放源代码的关系数据库系统,其体积小,占用空间小,使用简单,支持内存运行方式等特点


Hsqldb有四种运行模式

1、内存(Memory-Only)模式,这种很少用,还不如直接List<Map<?,?>>呢

DriverManager.getConnection("jdbc:hsqldb:mem:dbname","username","password");

2、进行(In-Process)模式,通俗的来说就是类似sqlite的文件形式的数据库,可以试一下在Android上应该也没多大的问题

DriverManager.getConnection("jdbc:hsqldb:file:/E:/hsqldb/data/dbname","username","password");
DriverManager.getConnection("file:/opt/db/dbname","username","password");
DriverManager.getConnection("jdbc:hsqldb:file:dbname","username","password");

3、服务器模式,当然这种在Android上也没啥问题,等有时间,哥来测试一下

DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:port/dbname","username","password");

4、Web服务器模式

DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:port/dbname","username","password");


下载地址:http://sourceforge.net/projects/hsqldb/files/

目前最新版本是 hsqldb-2.3.2.zip


解压后产生很多文件,其中最重要的文件不是bin或者build下的bat或者其他处理程序,而是  lib目录下的2个jar包,其中 hsqldb.jar是hsqldb的核心文件

注:当然,还有一个文件比较重要,那就是src目录下的源码


在bin目录下有如下批处理文件,点击runServer则指向data目录的test数据库,runManagerSwing则打开图形化界面,因此,这些批处理文件可以随便点着

玩玩儿,有兴趣的话可以使用文本编辑器打开查看里面的脚本,很简单的

一.构建我们自己的服务模式数据库

这里主要有2条比较常用的命令,作用类似,目的是实现创建数据库(注意:如果数据库存在,则不从新创建)并启动数据库服务器

首先得进入lib目录

java -classpath hsqldb.jar org.hsqldb.server.Server -database.0 ../db/mydb -dbname.0 xdb

第二条,可以指定端口

java -classpath ./hsqldb.jar org.hsqldb.server.Server -port 9001 -database.0 ../db/mydb -dbname.0 mydb

为了随时能够启动服务器,我们可以通过bat文件实现,在db目录中构建我们的runServer.bat文件

cd .\
@java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server -database.0 ./mydb -dbname.0 mydb

注意,对于web数据库服务器来说,命令可能稍有不同

java -classpath ../lib/hsqldb.jar org.hsqldb.WebServer –database.0 testdb –dbname.0 testdbname


运行如上命令,会在相应的目录下产生对应的文件,如

二.在Eclipse中进行开发,我们只需要把hsqldb.jar导入项目即可

举个栗子,本程序改造了一下别人的例子,修补了原有程序的很多bug

package com.ts.hsqldb.utils;

import java.io.IOException;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.logging.Level;
import java.util.logging.Logger;

import org.hsqldb.server.Server;


public class HSQLUtil {

	public static final int PORT = 9001;
	public static final String DB_NAME = "mydb"; // 数据库文件名,同时也是本类中的数据库名
	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) {
			if (!HSQLUtil.isConnected()) {
				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.setNoSystemExit(true);
				server.start(); // 实质和命令类似,也是创建数据库并启动服务,如果数据库存在,则直接启动即可
				System.out.println("hsqldb started...");
				try {
					Thread.sleep(1000);
				} catch (InterruptedException e) {
					e.printStackTrace();
				}
			}

		} else if (mode == STAND_ALONE_MODE) {
			// standalone模式,打开连接就同时启动数据库,所以这里可以什么都不做
		}

		return true;
	}

	/**
	 * 关闭数据库服务
	 */
	public static boolean stopHSQL() {
		try {
			Statement statement = getConnection().createStatement();
			getConnection().close();
			return true;
		} catch (SQLException ex) {
			Logger.getLogger(HSQLUtil.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(HSQLUtil.class.getName()).log(Level.SEVERE, null,
					ex);
		} catch (SQLException ex) {
			Logger.getLogger(HSQLUtil.class.getName()).log(Level.SEVERE, null,
					ex);
		}
		return conn;
	}

	/**
	 * 判断服务器是否已开启
	 * 
	 * @return
	 */
	public static boolean isConnected() {
		Connection hsqlConn = HSQLUtil.getConnection();
		boolean isOpened = false;

		if (hsqlConn == null) {
			return false;
		}
		try {
			isOpened = !hsqlConn.isClosed();
		} catch (SQLException e) {
			e.printStackTrace();
		} finally {
			try {
				hsqlConn.close();
			} catch (SQLException e) {
			}
		}
		return isOpened;
	}

}

再来个测试用例

package com.ts.hsqldb.test;

import java.sql.SQLException;
import java.sql.Statement;
import java.util.UUID;
import java.util.logging.Level;
import java.util.logging.Logger;

import com.ts.hsqldb.utils.HSQLUtil;

public class HsqlDBTestCase {

	public static void main(String[] args) {
		HSQLUtil.mode = HSQLUtil.SERVER_MODE;
		HSQLUtil.startHSQL();

		try {
			System.out.println("start to connect hsqldb and excute statements\n");
			Statement statement = HSQLUtil.getConnection().createStatement();
			statement.executeUpdate("create table if not exists customer(id integer primary key,name varchar(32) not null,
			password varchar(64) not null,UNIQUE(name))");
			for (int i = 10; i < 20; i++) {
				String password = UUID.randomUUID().toString();
				String name = password.split("\\-")[0];
				String sql = "insert into customer values(" + i + ",'" + name+ "','" + password + "')";
				int count = statement.executeUpdate(sql);
				System.err.println("excute [ " + sql + " ] "+ (count > 0 ? "Ok" : "Bad"));
			}
			statement.close();
		} catch (SQLException ex) {
			Logger.getLogger(HsqlDBTestCase.class.getName()).log(Level.SEVERE,
					null, ex);
		}
		HSQLUtil.stopHSQL();
		System.out.println("\ndisconnect to hsqldb");
	}

}


三.运行效果还不错,现在来启动图形化界面试试

基本上可以双击  hsqldb.jar就能启动,如果点击不行的话,请使用如下命令

java -classpath hsqldb.jar org.hsqldb.util.DatabaseManager


登录界面如下,选择相应的模式即可进入


登录成功显示如下,关于hsqldb图形化的界面相信大家一看就会使用(貌似也可以连接mysql,orcale,postgresql等数据库),这里我主要说2个部分,快速生成查询语句和性能测试

1.右键快速生成查询语句,注意,这里的语句并不严格,所以容错能力非常好,下文即将说道

2.性能测试


会生成响应的 性能测试脚本

-->>>TEST<<<-- ;
--#1000;
DROP TABLE Test IF EXISTS;
CREATE TABLE Test(
  Id INTEGER PRIMARY KEY,
  FirstName VARCHAR(20),
  Name VARCHAR(50),
  ZIP INTEGER) ;
INSERT INTO Test 
  VALUES(#,'Julia','Peterson-Clancy',#) ;
UPDATE Test SET Name='Hans' WHERE Id=# ;
SELECT * FROM Test WHERE Id=# ;
DELETE FROM Test WHERE Id=# ;
DROP TABLE Test IF EXISTS;

-->>>TEST<<<-- ;表示此脚本是测试脚本

--#1000;表示该段脚本运行1000次,测试每局运行的速度

执行截图如下


四.sql语句的编写,基本和mysql没啥区别,等有区别,直接上网即可,如下是我的实践脚本

DROP TABLE IF EXISTS BOOK;

CREATE TABLE  IF NOT EXISTS book  (
    id integer identity PRIMARY KEY,
    name varchar(40) not null,
    description varchar(256),
    url varchar(80),
    UNIQUE (name)
);

INSERT INTO book (id, name, description, url) VALUES (3 , 'hsqldb for j2ee', 'hsqldb web', 'http://www.sohsql.org')
INSERT INTO book(id,name,description,url) values (2,'hsqlDB Developer','how to use hsqldb','http://www.hsqldb.com')

SELECT * FROM book where id=2

UPDATE BOOK  SET description='hsqldb for web' where id=3

今后如果有时间的话,打算在Android上试一试


--------------《Try》《doing》《it》《!》-------------


© 著作权归作者所有

共有 人打赏支持
IamOkay
粉丝 187
博文 450
码字总数 368039
作品 0
海淀
程序员
Java学习---Java简单认识

前言 小编在学习Java方面的基础知识,发现里面有很多是结合之前的语言的特点发展过来的,不同的地方是,Java有它自己的发展和特点。下面小编先简单地做一下总结,结合看过的1-2章的J2SE视频,...

m18633778874 ⋅ 04/01 ⋅ 0

5月份值得一看的 Java 技术干货!

5月又即将要离我们远去了,这个月有小长假51劳动节,有54青年节,有513母亲节,更有坑爹的520神马节?!! 废话不说,又到了总结上个月干货的时候了,这个月我们带来了各种Java技术干货,都是...

Java技术栈 ⋅ 05/31 ⋅ 0

Java编程基础知识点和技术点归纳

Java是一种可以撰写跨平台应用软件的面向对象的程序设计语言。Java 技术具有卓越的通用性、高效性、平台移植性和安全性,广泛应用于PC、数据中心、游戏控制台、科学超级计算机、移动电话和互...

Java小辰 ⋅ 05/23 ⋅ 0

JavaAgent-SandBox

1.前言 之前初步学习了javaAgent,并做了一份总结《JavaAgent学习笔记》。然后在看到《JVM-Sandbox 基于JVM的非侵入式运行期AOP解决方案》之后,接触到了集团的sandBox。并尝试使用这种有真正...

何度 ⋅ 05/09 ⋅ 0

ThreadLocal趣谈 —— 杨过和他的四个冤家

一个一个上 一日醒来,杨过发现小龙女离家出走,于是外出寻找,不料碰上了金轮法王、李莫愁、裘千尺、公孙止四个冤家。 “哼,四个打我一个,算什么英雄好汉,有本事的,一个一个上!” 按照...

SexyCode ⋅ 06/12 ⋅ 0

JavaWeb07-HTML篇笔记(二)

1.1 案例一:使用JDBC完成CRUD的操作:1.1.1 需求: 对分类管理使用JDBC进行CRUD的操作. 1.1.2 分析:1.1.2.1 技术分析: 【JDBC的概述】 Ø JDBC:Java DataBase Connectivity Java数据库的连...

我是小谷粒 ⋅ 05/16 ⋅ 0

Sharding-JDBC 3.0 即将发布,更名 Sharding-Sphere !

8日下午,知名开源数据库中间件 Sharding-JDBC 创始人张亮在朋友圈中发布了一个动态,表示 Sharding-JDBC 3.0 将于近期发布。 从该动态我们可以知道,从 3.0 开始,Sharding-JDBC 将更名为 ...

雨田桑 ⋅ 05/08 ⋅ 16

LINUX类主机JAVA应用程序占用CPU、内存过高分析手段

转载声明:本文为DBA+社群原创文章,转载必须连同本订阅号二维码全文转载,并注明作者名字及来源:DBA+社群(dbaplus)。 做为一个IT运维人员,通常在运维过程中会遇到各种各样的问题,系统问...

丁启良 ⋅ 2015/12/04 ⋅ 0

002. 深入JVM学习—JVM对象访问模式

Object obj = new Object(); 分析 --- Object obj:描述的是保存在栈内存之中,而后保存有堆内存的引用,这个数据会保存在本地变量表中(变量表描述有哪些对象,保存对象栈的位置,栈对应着堆...

影狼 ⋅ 昨天 ⋅ 0

面试中关于Java虚拟机(jvm)的问题看这篇就够了

最近看书的过程中整理了一些面试题,面试题以及答案都在我的文章中有所提到,希望你能在以问题为导向的过程中掌握虚拟机的核心知识。面试毕竟是面试,核心知识我们还是要掌握的,加油~~~ 下面...

snailclimb ⋅ 05/12 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

Sqoop

1.Sqoop: 《=》 SQL to Hadoop 背景 1)场景:数据在RDBMS中,我们如何使用Hive或者Hadoop来进行数据分析呢? 1) RDBMS ==> Hadoop(广义) 2) Hadoop ==> RDBMS 2)原来可以通过MapReduce I...

GordonNemo ⋅ 51分钟前 ⋅ 0

全量构建和增量构建的区别

1.全量构建每次更新时都需要更新整个数据集,增量构建只对需要更新的时间范围进行更新,所以计算量会较小。 2.全量构建查询时不需要合并不同Segment,增量构建查询时需要合并不同Segment的结...

无精疯 ⋅ 今天 ⋅ 0

如何将S/4HANA系统存储的图片文件用Java程序保存到本地

我在S/4HANA的事务码MM02里为Material维护图片文件作为附件: 通过如下简单的ABAP代码即可将图片文件的二进制内容读取出来: REPORT zgos_api.DATA ls_appl_object TYPE gos_s_obj.DA...

JerryWang_SAP ⋅ 今天 ⋅ 0

云计算的选择悖论如何对待?

导读 人们都希望在工作和生活中有所选择。但心理学家的调查研究表明,在多种选项中进行选择并不一定会使人们更快乐,甚至不会产生更好的决策。心理学家Barry Schwartz称之为“选择悖论”。云...

问题终结者 ⋅ 今天 ⋅ 0

637. Average of Levels in Binary Tree - LeetCode

Question 637. Average of Levels in Binary Tree Solution 思路:定义一个map,层数作为key,value保存每层的元素个数和所有元素的和,遍历这个树,把map里面填值,遍历结束后,再遍历这个map,把每...

yysue ⋅ 今天 ⋅ 0

IDEA配置和使用

版本控制 svn IDEA版本控制工具不能使用 VCS-->Enable Version Control Integration File-->Settings-->Plugins 搜索Subversion,勾选SVN和Git插件 删除.idea文件夹重新生成项目 安装SVN客户......

bithup ⋅ 今天 ⋅ 0

PE格式第三讲扩展,VA,RVA,FA的概念

作者:IBinary 出处:http://www.cnblogs.com/iBinary/ 版权所有,欢迎保留原文链接进行转载:) 一丶VA概念 VA (virtual Address) 虚拟地址的意思 ,比如随便打开一个PE,找下它的虚拟地址 这边...

simpower ⋅ 今天 ⋅ 0

180623-SpringBoot之logback配置文件

SpringBoot配置logback 项目的日志配置属于比较常见的case了,之前接触和使用的都是Spring结合xml的方式,引入几个依赖,然后写个 logback.xml 配置文件即可,那么在SpringBoot中可以怎么做?...

小灰灰Blog ⋅ 今天 ⋅ 0

冒泡排序

原理:比较两个相邻的元素,将值大的元素交换至右端。 思路:依次比较相邻的两个数,将小数放在前面,大数放在后面。即在第一趟:首先比较第1个和第2个数,将小数放前,大数放后。然后比较第...

人觉非常君 ⋅ 今天 ⋅ 0

Vagrant setup

安装软件 brew cask install virtualboxbrew cask install vagrant 创建project mkdir -p mst/vmcd mst/vmvagrant init hashicorp/precise64vagrant up hashicorp/precise64是一个box......

遥借东风 ⋅ 今天 ⋅ 0

没有更多内容

加载失败,请刷新页面

加载更多

下一页

返回顶部
顶部