1.先试用服务器模式。
1)下载hsqldb,解压并进入该目录,创建data目录。
2)创建数据库:java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 file:test1 -dbname.0 testyll
上面语句创建了一个以testyll为访问名字的数据库,不过该数据库在data目录下的存储文件的名字为test1.
3)java -cp ../lib/hsqldb.jar org.hsqldb.DatabaseManager 打开 DatabaseManager。
Type :选择服务器模式( HSQL Database Engine Server )
URL : JDBC 连接,修改为jdbc:hsqldb:hsql://localhost/testyll
这样就进入testyll数据库。
4)在command栏里输入:
create table Person(
ID INTEGER NOT NULL PRIMARY KEY,
FIRST_NAME VARCHAR NOT NULL,
LAST_NAME VARCHAR NOT NULL,
BIRTH_DATE DATE);
创建一个表。
insert into Person values(1,'yao','lingling','1986-06-30');
插入一条记录。
UPDATE Person SET BIRTH_DATE = '1986-05-24' WHERE LastName = 'lingling'
查看结果变化。
select * from person;
5)接下去用java程序来访问这个数据库。
先创建一个java文件,将其保存于data目录下。
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.Statement;
import org.hsqldb.jdbcDriver;
public class HsqlDemo {
public static void main(String[] args) {
try {
Class.forName("org.hsqldb.jdbcDriver");
Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/testyll", "sa", "");
if (c != null) {
System.out.println("Connected db success!");
String sql = "CREATE TABLE TBL_USERS(ID INTEGER, NAME VARCHAR, BIRTHDAY DATE);";
Statement st = c.createStatement();
st.execute(sql);
sql = "INSERT INTO TBL_USERS(ID, NAME, BIRTHDAY) VALUES ('1', 'ADMIN', SYSDATE);";
st.executeUpdate(sql);
if (st != null) {
st.close();
}
c.close();
}
} catch(Exception e) {
System.out.println("ERROR:failed to load HSQLDB JDBC driver.");
e.printStackTrace();
return;
}
}
}
6)javac -cp ../lib/hsqldb.jar HsqlDemo.java 编译这个java文件。
7) java -cp ../lib/hsqldb.jar;. HsqlDemo 执行这个class文件
8)然后在HSQL database manager 中通过 view - refresh tree 查看这个java程序对testyll数据库的改变。
9)创建自己指定的server
首先在 data 目录下创建一个 server.properties 文件,文件内容为(注:在实际文件中,删除后面的注释内容):
server.port=9001 # 指定端口号为 9001
server.database.1=file:mydb # 将在 data 目录下创建 mydb 数据库
server.dbname.=mydb # 指定数据库名, jdbc 连接时就是用此名称
server.silent=true
在data 目录下创建 runServer.bat 文件,文件内容为
@java -classpath ../lib/hsqldb.jar org.hsqldb.Server
双击运行 runServer.bat 文件,将会在 data 目录下创建 mydb 数据库,并启动数据库。
这样做的话,就需要在java文件里: Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost:9001/mydb", "sa", "");
2 以上只是对服务器模式的试用:
下面继续对其他模式进行尝试。
hsqldb总共有三种模式:Server模式, In-Process模式, Memry-Only数据库
1)Server模式提供了最大的可访问性。应用程序(客户端)通过Hsqldb的JDBC驱动连接服务器。在服务器模式中,服务器在运行的时候可以被指定为最多10个数据库。 Server模式又分为三种: Hsqldb Server, Hsqldb Web Server, Hsqldb Servlet。
Hsqldb Server这种模式是首选的也是最快的。它采用HSQLDB专有的通信协议。 Hsqldb Web Server 这种模式只能用在通过HTTP协议访问数据库服务器主机,采用这种模式唯一的原因是客户端或服务器端的防火墙对数据库对网络连接强加了限制。 Hsqldb Servlet 这种模式和Web Server一样都采用HTTP协议,当如Tomcat或Resin等servlet引擎(或应用服务器)提供数据库的访问时,可以使用这种模式。但是Servlet模式不能脱离servlet引擎独立启动。
server模式的创建数据库连接的语句为 Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/testyll", "sa", "");
2)In-Process模式又称Standalone模式。这种模式下,数据库引擎作为应用程序的一部分在同一个JVM中运行。对于一些应用程序来说, 这种模式因为数据不用转换和通过网络的传送而使得速度更快一些。其主要的缺点就是默认的不能从应用程序外连接到数据库。
Connection c = DriverManager.getConnection("jdbc:hsqldb:file:testdb ", "sa", "");
3)Memory-Only数据库不是持久化的而是全部在随机访问的内存中。因为没有任何信息写在磁盘 上。这种模式通过mem:协议的方式来指定:
Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:dbName", "sa", "");
也可以在server.properties中指定相同的URL来运行一个Memory-Only(仅处于内存中)服务器实例。
3.回过头来再来看看hsqldb在jpetstore里面的运用。他这个应该是创建的memory-only模式吧。
好了,我找了文档规范了,请参照如下网页:
http://static.springsource.org/spring/docs/3.0.x/spring-framework-reference/html/jdbc.html
其中12.8专门讲述了spring对embedded-database的支持。
参考资料:
有一篇我觉得写的很好的文章就是:
http://www.cnblogs.com/kenkofox/archive/2010/12/01/1893782.html
Spring by Example JDBC Module:http://www.springbyexample.org/examples/spring-by-example-jdbc-module.html
http://stackoverflow.com/questions/4293787/jdbc-create-table