POM.xml
<?xml version="1.0" encoding="UTF-8"?><project>
<modelVersion>4.0.0</modelVersion>
<groupId>hsqldemo</groupId>
<artifactId>hsqldemo</artifactId>
<version>0.0.1-SNAPSHOT</version>
<description></description>
<dependencies>
<dependency>
<groupId>commons-lang</groupId>
<artifactId>commons-lang</artifactId>
<version>2.3</version>
</dependency>
<dependency>
<groupId>hsqldb</groupId>
<artifactId>hsqldb</artifactId>
<version>1.8.0.7</version>
</dependency>
</dependencies>
</project>
demo.Client
package demo;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class Client {
/**
* @param args
*/
public static void main(String[] args) {
try {
// Connection c =
// DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9002/test",
// "sa", "");
Connection c = DriverManager.getConnection(
"jdbc:hsqldb:file:/opt/db/testdb", "sa", "");
// Connection c =
// DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", "");
} catch (SQLException e) {
e.printStackTrace();
}
}
}
HsqldbDemo.java
package demo;
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
/*
* Created on 2003-10-5 by Liudong
* /
import java.io.*;
import java.sql.*;
import org.hsqldb.*;
/**
* HSQLDB数据库引擎测试类
* @author Liudong
*/
public class HsqldbDemo {
// 数据库名称
public final static String DATABASE_NAME = "hsqltest";
// 数据库端口缺省为9001
public final static int PORT = 9001;
/**
* 测试程序入口
*
* @param args
* @throws Exception
*/
public static void main(String[] args) throws Exception {
String path = "data";
File f = new File(path);
if (!f.exists())
f.mkdirs();
HsqlDBManager hsqldb = new HsqlDBManager(path);
hsqldb.setDatabaseName(DATABASE_NAME);
hsqldb.setPort(PORT);
new Thread(hsqldb).start();
System.out.println("数据库服务已启动");
// 开始测试
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
String sql = null;
try {
// 连接数据库
Class.forName("org.hsqldb.jdbcDriver");
conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost", "sa", "");
// 创建表
sql = "CREATE TABLE USER(ID INTEGER,NAME VARCHAR(50),MOBILE CHAR(12))";
ps = conn.prepareStatement(sql);
ps.executeUpdate();
// 插入数据
sql = "INSERT INTO user VALUES(?,?,?)";
ps = conn.prepareStatement(sql);
ps.setInt(1, 1);
ps.setString(2, "Winter Lau");
ps.setString(3, "13912345678");
ps.executeUpdate();
// 查询数据
ps = conn.prepareStatement("SELECT * FROM user");
rs = ps.executeQuery();
while (rs.next()) {
System.out.println("ID:" + rs.getInt("id"));
System.out.println("NAME:" + rs.getString("name"));
System.out.println("MOBILE:" + rs.getString("mobile"));
}
} finally {
if (rs != null)
rs.close();
if (ps != null)
ps.close();
if (conn != null)
conn.close();
}
// 退出程序
System.exit(0);
}
}
HsqldbManager.java
package demo;
import java.io.File;
import org.hsqldb.Server;
/**
* 数据库服务线程
*
* @author Liudong
*/
class HsqlDBManager implements Runnable {
String dataPath;
String databaseName = "test";
int port = -1;
/**
* 构造函数,需要一个数据路径的参数 该参数必须为物理存在的路径
*
* @param dataPath
*/
public HsqlDBManager(String dataPath) {
this.dataPath = dataPath;
if (!this.dataPath.endsWith(File.separator))
this.dataPath += File.separator;
this.dataPath += databaseName;
}
public void run() {
String[] args = null;
if (port != -1)
args = new String[] { "-database", dataPath, "-port", port + "" };
else
args = new String[] { "-database", dataPath };
// 调用HSQLDB的服务入口
Server.main(args);
}
public String getDatabaseName() {
return databaseName;
}
public String getDataPath() {
return dataPath;
}
public void setDatabaseName(String string) {
databaseName = string;
}
public void setDataPath(String string) {
dataPath = string;
}
public int getPort() {
return port;
}
public void setPort(int i) {
port = i;
}
}
HsqldbDemo.java
import java.io.File;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class HsqldbDemo {
/**
* @param args
*/
public static void main(String[] args) {
//1.start the server
String path = "test";
File f = new File(path);
if(!f.exists()){
f.mkdir();
}
HsqldbUtil hsqldbUtil = new HsqldbUtil(path);
new Thread(hsqldbUtil).start();
System.out.println("DATABASE STATED");
//2.process data
Connection conn = null;
Statement stmt = null;
ResultSet rs = null;
try {
Class.forName("org.hsqldb.jdbcDriver");
conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/","sa","");
stmt = conn.createStatement();
//create table
stmt.execute("CREATE TABLE testeste(ID INTEGER , NAME VARCHAR(32) , DATE VARCHAR(64))");
//
//insert data
stmt.execute("INSERT INTO testeste VALUES (1,'ONE','2008-01')");
stmt.execute("INSERT INTO testeste VALUES (2,'TWO','2008-02')");
stmt.execute("INSERT INTO testeste VALUES (3,'THREE','2008-03')");
stmt.execute("INSERT INTO testeste VALUES (4,'FOUR','2008-04')");
//select data
rs = stmt.executeQuery("select * from testeste");
while(rs.next()){
System.out.print(rs.getString(1) + "\t");
System.out.print(rs.getString(2) + "\t");
System.out.println(rs.getString(3));
}
System.exit(0);
} catch (ClassNotFoundException e) {
e.printStackTrace();
} catch (SQLException e) {
e.printStackTrace();
} finally{
try {
rs.close();
} catch (SQLException e1) {
e1.printStackTrace();
}
try {
conn.close();
} catch (SQLException e) {
e.printStackTrace();
}
}
//
}
}
HsqldbUtil.java
import java.io.File;
import org.apache.commons.lang.StringUtils;
import org.hsqldb.Server;
public class HsqldbUtil implements Runnable {
private String dbName = "test";
private String pathName = "test";
private int port = -1;
public HsqldbUtil(String pathName) {
super();
if (!StringUtils.isBlank(pathName)) {
if (!pathName.endsWith(File.separator)) {
pathName += File.separator;
}
this.pathName = pathName;
} else {
throw new RuntimeException("invalid pathName");
}
}
// run
public void run() {
String[] args = null;
if(port!=-1){
args = new String[]{"database",this.getPathName(),"-port",this.getPort()+""};
}else{
args = new String[]{"database",this.getPathName()};
}
Server.main(args);
}
public String getDbName() {
return dbName;
}
public void setDbName(String dbName) {
this.dbName = dbName;
}
public String getPathName() {
return pathName;
}
public void setPathName(String pathName) {
this.pathName = pathName;
}
public int getPort() {
return port;
}
public void setPort(int port) {
this.port = port;
}
}