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

Hsqldb有四种运行模式

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

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");

目前最新版本是 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

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》《!》-------------

java hsqldb_Java HsqlDB的初步使用和技巧总结相关推荐

  1. eclipsevue代码怎么运行_[Java教程]使用eclipse初步学习vue.js操作

    [Java教程]使用eclipse初步学习vue.js操作 0 2017-11-26 19:00:06 一.vue.js的初步认识 https://unpkg.com/vue ">vu ...

  2. Java内存管理的9个小技巧

    1.最基本的建议是尽早释放无用对象的引用.如:  ...  A a = new A();  //应用a对象  a = null; //当使用对象a之后主动将其设置为空  -.  注:如果a 是方法的返 ...

  3. JAVA 枚举类的初步理解

    JAVA 枚举类的初步理解 现在Java的枚举类在真实项目中已经用的比较频繁,比静态常量更好用,也更有限定性,enum类可以用来表示有限的类对象,比如星期.月份.性别或者项目中的产品类型 像诸如此类的 ...

  4. java数据可视化平台初步构想

    2019独角兽企业重金招聘Python工程师标准>>> java数据可视化平台初步构想 平台架构 权限系统-负责后台用户权限 后台管理系统(oss)-负责后台运营配置相关操作 前端展 ...

  5. 第21章 java线程(1)-线程初步

    java线程(1)-线程初步 1.并行和并发 并行和并发是即相似又有区别: 并行:指两个或者多个事件在同一时刻点发生. 并发:指两个或多个事件在同一时间段内发生 在操作系统中,并发性是指在一段事件内宏 ...

  6. java rcfile,hsqldb sqltool rcfile不起作用

    我可以运行命令行SqlTool for HSQLDB连接到数据库并使用 --inlineRc 选项运行SQL语句(并指定数据库url / user / password),但我无法使用 --rcFil ...

  7. Java 中代码优化的 30 个小技巧(中)

    11 位运算效率更高 如果你读过 JDK 的源码,比如 ThreadLocal.HashMap 等类,你就会发现,它们的底层都用了位运算. 为什么开发 JDK 的大神们,都喜欢用位运算? 答:因为位运 ...

  8. Java 中代码优化的 30 个小技巧(下)

    21 防止死循环 有些小伙伴看到这个标题,可能会感到有点意外,代码中不是应该避免死循环吗?为啥还是会产生死循环? 殊不知有些死循环是我们自己写的,例如下面这段代码: while(true) {if(c ...

  9. 聊聊我们Java中代码优化的30个小技巧

    今天我们一起聊聊Java中代码优化的30个小技巧,希望会对你有所帮助. 1.用String.format拼接字符串 不知道你有没有拼接过字符串,特别是那种有多个参数,字符串比较长的情况. 比如现在有个 ...

  10. Java中代码优化的30个小技巧

    1.用String.format拼接字符串 String.format方法拼接url请求参数,日志打印等字符串. 但不建议在for循环中用它拼接字符串,因为它的执行效率,比使用+号拼接字符串,或者使用 ...

最新文章

  1. python 寻找数组的中心索引_Leetcode724:寻找数组的中心索引(java、python3)
  2. jQuery中append、insertBefore、after与insertAfter方法注意事项
  3. Linux MySQL Connector/C++ 编程实例
  4. [architecture]-spin_unlock中是怎样让cpu退出standby模式的?
  5. 数学--数论--随机算法--Pollard Rho 大数分解算法(纯模板带输出)
  6. chromebook刷机_您可以购买的最好的Chromebook,2017年版
  7. 悦虎四代洛达1562M固件下载升级更新
  8. soapui工具_自动化测试需知的4项测试工具
  9. 小区移动基站能否杀人于无形?
  10. 面试题简答题——数据库相关汇总
  11. (转)python的range()函数用法
  12. linux umask命令
  13. 复盘:windows ubuntu 双系统引导恢复、分区表恢复
  14. Windows安全中心打不开,无法启动
  15. 无法访问 您可能没有权限使用网络资源
  16. 如何成为一名白帽子?
  17. 在ipad上播放flash大集合
  18. 最简单的python语言实现汉诺塔游戏
  19. Spark—15分钟教程
  20. 自编Photoshop简单教程

热门文章

  1. python界面实现点餐系统_餐厅点餐系统详细设计与系统实现
  2. 2018计算机应用基础教材,2018年计算机应用基础课件全套PPT电子档.ppt
  3. 利用EViews做截面数据的线性回归分析
  4. std在汇编语言是什么指令_详解汇编语言各种指令的解释与用法
  5. 磊科Q3刷236W 免交换机双拨
  6. 众元教育H3CSE20200603班-IPsec
  7. BS7799系列讲座:HTP模型图及构建(转载)
  8. asp.net mvc 中使用async/await异步编程
  9. 铣削力matlab,船用螺旋桨多轴铣削力仿真与优化+CAD图纸+MATLAB程序
  10. 机器人操作系统ROS—深度相机+激光雷达实现vSLAM建图与导航