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; } }