hsql是一款开源的基于Java的数据库。
数据库服务
使用默认配置直接启动
运行$HSQL_HOME/bin/runServer.bat;
配置服务参数
如数据库文件名和服务监听端口等。
- 通过命令行参数:(详见User guide -> Chapter 1 -> Server mode)通过runServer.bat文件可知它只是运行了"java -classpath ../lib/hsqldb.jar org.hsqldb.server.Server",实际上可以加命令行参数指定服务特性。例如:
java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:mydb -dbname.0 xdb
- 通过配置文件:(详见User guide -> Chapter 13: HyperSQL Network Listeners -> Server and Web Server Properties)在hsql服务启动目录(运行"java ...Server"的目录)下创建一个server.properties文件,例如:
server.database.0=godudb
server.port=3001
- 通过程序代码:(详见User guide -> Chapter 13: HyperSQL Network Listeners -> Starting a Server from your Application)例如:
HsqlProperties p = new HsqlProperties();
p.setProperty("server.database.0","file:/opt/db/accounts");
p.setProperty("server.dbname.0","an_alias");
// set up the rest of properties
// alternative to the above is
Server server = new Server();
server.setProperties(p);
server.setLogWriter(null); // can use custom writer
server.setErrWriter(null); // can use custom writer
server.start();
客户端
图形界面操作
这里用squirrel-sql作为客户端,运行$SQUIRREL_HOME/squirrel-sql.bat启动程序;
安装hsql驱动
将\(HSQL_HOME/lib/hsqldb.jar拷贝到\)SQUIRREL_HOME/lib下;
配置数据库别名
jdbc url: jdbc:hsqldb:hsql://localhost;
username: sa
password: 留空
然后连接就可以打开数据库了。
数据库操作
建表
在SQL面板里输入:
CREATE TABLE Person ( LastName varchar(10), FirstName varchar(10), Address varchar(10), Age int )
运行后在database/PUBLIC/TABLE下会生成一个名为Person的表;
插入数据
insert into person values('chad','lee','guangzhou',33)
删除表
drop table person
持久化验证
重启数据库服务后再用客户端连接服务,可以看到原来的表以及表中的数据都在,这样就实现了数据的持久化。
程序代码操作
下面的代码演示了初始化数据驱动,连接数据库,读取数据及其关闭数据库服务的完整过程,与上面的代码启动服务配合,可以实现对数据库的自动化测试。
try { Class.forName("org.hsqldb.jdbcDriver"); } catch (Exception e) { System.err.println("ERROR: failed to load HSQLDB JDBC driver."); e.printStackTrace(); return; } try { Connection conn = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:3001", "SA", ""); String sql = "select * from person"; PreparedStatement content = conn.prepareStatement(sql); ResultSet res = content.executeQuery(); // int rowcount = -1; // if (res.last()) { // ResultSet.last() is unsupported by hsql // rowcount = res.getRow(); // } while (res.next()) { System.out.println(res.getString(1)); System.out.println(res.getString(2)); System.out.println(res.getString(3)); } Statement st = conn.createStatement(); st.execute("SHUTDOWN"); conn.close(); } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); }