import java.sql.Connection;

import java.sql.DriverManager;

import java.sql.ResultSet;

import java.sql.SQLException;

import java.sql.Statement;

import java.util.logging.Level;

import java.util.logging.Logger;

import org.hsqldb.Server;

import org.hsqldb.result.Result;

/**

* 方便单机程序使用HSQL的工具类,包括启动,关闭,连接。数据库默认不加密,用户为sa,密码空

* @author 郑高强

*/

public class HSQL_Util {

public static final int PORT = 9002;

public static final String DB_NAME = "kenko";       //数据库文件名,同时也是本类中的数据库名

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 void main(String[] args) {

HSQL_Util.mode = HSQL_Util.STAND_ALONE_MODE;

HSQL_Util.startHSQL();

//        Connection conn = HSQL_Util.getConnection();

try {

createDB();

//            testQuery();

} catch (SQLException ex) {

Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

}

HSQL_Util.stopHSQL();

}

private static void createDB() throws SQLException {

Statement statement = getConnection().createStatement();

statement.executeUpdate("create table customer2(id integer not null primary key,firstname varchar(100),lastname varchar(100))");

for (int i = 10; i < 60000; i++) {

statement.executeUpdate("insert into customer2 values(" + i + ",'liu','zhaoyang')");

}

statement.close();

}

private static void testQuery() throws SQLException {

Connection conn = HSQL_Util.getConnection();

ResultSet r = conn.createStatement().executeQuery("select * from customer");

while(!r.isLast()){

r.next();

Object o = r.getObject(1);

Object o1 = r.getObject(2);

System.out.println(o.toString()+o1.toString());

}

}

/**

* 启动数据库服务

*/

public static boolean startHSQL() {

if (mode == SERVER_MODE) {

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.start();         //自动多线程运行

System.out.println("hsqldb started...");

} else if (mode == STAND_ALONE_MODE) {

//standalone模式,打开连接就同时启动数据库,所以这里可以什么都不做

System.out.println("hsqldb STAND_ALONE_MODE started...");

}

try {

Thread.sleep(800);        // 等待Server启动

} catch (InterruptedException e) {

}

return true;

}

/**

* 关闭数据库服务

*/

public static boolean stopHSQL() {

try {

Statement statement = getConnection().createStatement();

statement.executeUpdate("SHUTDOWN;");

return true;

} catch (SQLException ex) {

Logger.getLogger(HSQL_Util.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(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

} catch (SQLException ex) {

Logger.getLogger(HSQL_Util.class.getName()).log(Level.SEVERE, null, ex);

}

return conn;

}

}

HsqlDB Demo的更多相关文章

  1. SSH初体验系列--Hibernate--1--环境配置及demo

    最近在学hibernate,常见的教程都是搭配mysql,因为公司本地电脑用的是pg,所以就尝试着做个pg的小demo. 自己也是边学边写,只当是加深印象.话不多说,直接开始; 一) 准备工作; 1) ...

  2. HSQL基本使用(linux),安装+Demo

    文章目录 下载 安装 运行 使用数据库 demo 注意 下载 http://sourceforge.net/projects/hsqldb/files/ 安装 将下载的包,解压到任意目录即可 运行 通 ...

  3. 通过一个demo了解Redux

    TodoList小demo 效果展示 项目地址 (单向)数据流 数据流是我们的行为与响应的抽象:使用数据流能帮我们明确了行为对应的响应,这和react的状态可预测的思想是不谋而合的. 常见的数据流框架 ...

  4. 很多人很想知道怎么扫一扫二维码就能打开网站,就能添加联系人,就能链接wifi,今天说下这些格式,明天做个demo

    有些功能部分手机不能使用,网站,通讯录,wifi基本上每个手机都可以使用. 在看之前你可以扫一扫下面几个二维码先看看效果: 1.二维码生成 网址 (URL) 包含网址的 二维码生成 是大家平时最常接触 ...

  5. 在线浏览PDF之PDF.JS (附demo)

    平台之大势何人能挡? 带着你的Net飞奔吧!:http://www.cnblogs.com/dunitian/p/4822808.html#skill 下载地址:http://mozilla.gith ...

  6. 【微框架】Maven +SpringBoot 集成 阿里大鱼 短信接口详解与Demo

    Maven+springboot+阿里大于短信验证服务 纠结点:Maven库没有sdk,需要解决 Maven打包找不到相关类,需要解决 ps:最近好久没有写点东西了,项目太紧,今天来一篇 一.本文简介 ...

  7. vue双向数据绑定原理探究(附demo)

    昨天被导师叫去研究了一下vue的双向数据绑定原理...本来以为原理的东西都非常高深,没想到vue的双向绑定真的很好理解啊...自己动手写了一个. 传送门 双向绑定的思想 双向数据绑定的思想就是数据层与 ...

  8. Android Studio-—使用OpenCV的配置方法和demo以及开发过程中遇到的问题解决

    前提: 1.安装Android Studio(过程略) 2.官网下载OpenCV for Android 网址:http:opencv.org/downloads.html 我下载的是下图的版本 3. ...

  9. iOS之ProtocolBuffer搭建和示例demo

    这次搭建iOS的ProtocolBuffer编译器和把*.proto源文件编译成*.pbobjc.h 和 *.pbobjc.m文件时,碰到不少问题! 搭建pb编译器到时没有什么问题,只是在把*.pro ...

随机推荐

  1. POJ1986 Distance Queries (LCA)(倍增)

    Distance Queries Time Limit: 2000MS   Memory Limit: 30000K Total Submissions: 12950   Accepted: 4577 ...

  2. 获取应用程序信息.h

    ////  获取应用程序信息.h//  IOS笔记// 一般会用来判断是否有新版本.是否需要强制更新 iOS的版本号,一个叫做Version,一个叫做Build,这两个值都可以在Xcode 中选中ta ...

  3. yield

    yield def foo(max): n, a, b = 0, 0, 1 while n<max: yield b a, b = b, a+b n+=1 for item in foo(5): ...

  4. app打包(同步发生冲突)

    1:打包步骤: 1:桌面建立一个文件夹,名字叫keystore 2:点击build下面的 ,如下:     3:会出现如下界面: 4:下一步: 5:如果有keystore,请点击 choose exi ...

  5. 两种设置disabled属性以及三种方法移除disabled属性

    //两种方法设置disabled属性 $('#areaSelect').attr("disabled",true); $('#areaSelect').attr("dis ...

  6. 移动web

    1.分辨率 1900*1200这就是一个分辨率, 因为pt的存在,因此还会有一个逻辑分辨率的概念 2.ppi = pixels per inch这里inch不是平方英尺,是英尺 3.dp = devi ...

  7. Squid 和 SNAT 上网

    方法1 , squid (具体配置如之前的记录) 代理机上安装squid软件 apt-get install squid service squid3 start 在被代理机上配置代理环境 vi /e ...

  8. 关于电信cdma基站nid,sid,bid的解释

    通过cdma的基站代码确定该基站的经纬度位置,必须知道Sid.Nid.Bid这三个基站数据,缺一不可. SID 是系统识别码,每个地级市只有一个sid,是唯一的. NID是网络识别码,由各本地网管理, ...

  9. ZIP4J---ZIP文件压缩与解压缩学习

    package com.wbh.common.utils; import java.io.File; import java.io.FileInputStream; import java.io.IO ...

  10. Linux LVM硬盘管理之一:概念介绍

    一.LVM概念介绍: LVM是 Logical Volume Manager(逻辑卷管理)的简写,它由Heinz Mauelshagen在Linux 2.4内核上实现.LVM将一个或多个硬盘的分区在逻 ...