HsqlDB使用

服务的安装,下载解压即安装 

HSQLDB
服务器模式的启动方法 
In-Process
Memory-Only模式无需另外启动HSQLDB 
服务器模式的处理流程(创建和启动mydb数据库): 
1.
数据库安装文件跟目录,创建mydb文件夹 
2.
创建runMydb.bat 
java -cp ../lib/hsqldb.jar org.hsqldb.Server -database mydb 
 
java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 mydb 
3.
创建manageMydb.bat 
java -cp ../lib/hsqldb.jar org.hsqldb.Server -database mydb 
 
java -cp ../lib/hsqldb.jar org.hsqldb.Server -database.0 mydb -dbname.0 mydb 
4.
主要的工具类 
org.hsqldb.util.DatabaseManager 
org.hsqldb.util.DatabaseManagerSwing 
org.hsqldb.util.Transfer 
org.hsqldb.util.QueryTool 
org.hsqldb.util.SqlTool 
5.
使用JDBC连接HSQLDB数据库 
try { 
        Class.forName("org.hsqldb.jdbcDriver" ); 
    } catch (Exception e) { 
        System.out.println("ERROR: failed to load HSQLDB JDBC driver."); 
        e.printStackTrace(); 
        return; 
    } 

    Connection c = DriverManager.getConnection("jdbc:hsqldb:hsql://localhost/mydb", "sa", ""); 
6. Hibernate
中使用HSQLDB hibernate.cfg.xml 
7. <hibernate-configuration> 
    <session-factory> 
... 
        <property name="connection.driver_class">org.hsqldb.jdbcDriver</property> 
        
        <property name="connection.url">jdbc:hsqldb:hsql://localhost/mydb</property> 
        <property name="connection.username">sa</property> 
        <property name="connection.password"></property> 
        
        <property name="dialect">org.hibernate.dialect.HSQLDialect</property> 
... 
    </session-factory> 
</hibernate-configuration> 

8.    
数据库具体表、数据的创建应该可以在 manage客户端进行(一般都是applet或者web页面) 



本地联系  mytest数据库,通过 管理客户端进行数据库的设计 
问题: HSQLSQL语句的规则 

通过linkhttp://zeroliu.blogdriver.com/zeroliu/1242671.html)的学习了解到 HSQL号称内存数据,在内存模式下所有数据不会保持;单机、服务器等模式下 所有的数据库操作会保存到一个 database.script 中,再次启动HSQLDB的时候 会快速的运行这个脚本回复数据库 
1.
内存驻留模式中只允许有一个数据库连接,所以在进行处理的时候要注意数据库连接的释放 
Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:aname", "sa", ""); 


2.
单机模式,应用程序使用JDBC创建数据库连接,并且hsqldb引擎作为应用程序的一部分运行在同一个jvm之下。此时数据库只允许一个应用去访问,也就是应用程序无法和数据库管理同时进行,适合部署模式 
jdbc:hsqldb:zzq 
或者 jdbc:hsqldb:c:/db/zzq 

3.
服务器模式,允许使用TCP套接字的并发链接 
java -cp ../lib/hsqldb.jar org.hsqldb.Server ?database zzq 

4.web
服务器模式,dbweb服务器的形式启动,允许jdbc驱动通过http执行sql;也可以以标准的servlet运行,运用于需要穿透防火墙的情况 
Java org.hsqldb.WebServer ?database zzq 



回到上面的问题,hsql的脚步可以在 database.script 里面阅读 
CREATE MEMORY TABLE CUSTOMER(ID INTEGER NOT NULL PRIMARY KEY,FIRSTNAME VARCHAR,LASTNAME VARCHAR,STREET VARCHAR,CITY VARCHAR) 

CREATE SEQUENCE S_PROCESS_UNIFY_SENDER AS INTEGER START WITH 0 

CREATE SCHEMA PUBLIC AUTHORIZATION DBA 

CREATE INDEX INDEX_PROCESS_PI ON PROCESS_INSTANCE(TEMPLATENAME,DRAFTERNAME,STATUS) 

GRANT DBA TO SA 

INSERT INTO PROCESS_TEMPLATE VALUES('ContractSupport',''.....)

 

 

 

具体例子:

 

1.Server模式

首先要启动server 端:

例如,在命令行窗口执行:

1.      E:/1008/study/hsqldb/hsqldb_1_8_0_9/hsqldb/lib>java -cp hsqldb.jar org.hsqldb.Se   

2.      rver -database.0 file:c:/hsqldb/xxx -dbname.0 x -database.1 c:/hsqldb/test/mydat   

3.      abase2 -dbname.1 db2  

 

创建了2个数据库,如:database.0 database.1 最多只能创建10

dbname.0 x ,dbname.1 db2这里的xdb2都是给客户端链接时使用的

database.0 file:c:/hsqldb/xxx,database.1 c:/hsqldb/test/mydatabase2 这里的xxxmydatabase2hsqldb文件的文件名,客户端链接时不能使用这个名字

然后启动工具窗口可以对建立的数据库进行操作。比如:

java 代码

1.      E:/1008/study/hsqldb/hsqldb_1_8_0_9/hsqldb/lib>java -cp hsqldb.jar org.hsqldb.util.DatabaseManager  

 

 这时会弹出一个工具窗口,可以对其进行设置

Recent:选择你最近的登录方案,[可选
Setting Name
:本次登录方案名称,如果本次登录成功,那么等你下次登录的时候在Recent下拉列表中将看到你的成功登录方案[可选
Type
:登录模式,其中包括In-Memory模式、Standalone(In-process)模式、Server模式、WebServer模式... ...[必选
Driver
:连接数据库的驱动程序[必选
URL
:连接数据库的URL[必选
User
:用户名[必选
Password
:密码[ 除非密码为空] ,默认密码是为空的,可以登录后对密码进行修改。只需要set password "123456",修改的只是当前链接的数据库,对其它数据库没有影响,hsqldb可以看着是一个库一个密码

2. 嵌入式In-Process打开

In-Process方式不用启动Server,直接设定JDBC URL即可,非常方便。但有一个缺点是只能在Java进程内共享信息,如果另外打开一个管理器,是没办法看到In-Process时的状态

1.      jdbc:hsqldb:file:C:/hsqldb/testdb  

 

其中路径是script文件不带后缀名的全路径,可以绝对路径,也可以是打开应用的相对路径。

另外有一种读取jar/classpath中的script文件的In-Process方式,方便发布war时不知道具体路径的情况。不过这种方式是只读不存盘的,利用来单元测试也不错。下面的设置将读取classpath根目录下的test.script

1.      jdbc:hsqldb:res:/hsqldb/testdb  

 

3.Memory方式打开
In-Process方式最大区别是不能读取Script文件进行初始化

1.      Connection c = DriverManager.getConnection("jdbc:hsqldb:mem:dbName""sa""");  

 

注意事项:当一个服务器实例启动或者建立一个in-process数据库连接的时候,如果指定的路径没有数据库存在,那么就会创建一个新的空的数据库。这个特点的副作用就是让那些新用户产生疑惑。在指定连接已存在的数据库路径的时候,如果出现了什么错误的话,就会建立一个指向新数据库的连接。为了解决这个问题,你可以指定一个连接属性ifexists=true只允许和已存在的数据库建立连接而避免创建新的数据库,如果数据库不存在的话,getConnection()方法将会抛出异常。

hibernate中,使用hsql中,如果设置主键类型用Idenetity,那么javafieldInteger类型,不能用Long

当你启动数据库执行创建表,增加数据的时候就会生成对应的sql语句。删除操作不会记录在script文件中。如果没有以正确的方式退出hsqldb那么会增加*.lck*.log文件,来记录你的操作,直到你正确保存数据并且退出数据库,这两个文件才会消失。 
正确的退出数据库是执行shutdown命令

比如:

1.      public class Test {   

2.        

3.          public static void main(String[] args){   

4.              try{       

5.                  Class.forName("org.hsqldb.jdbcDriver");             

6.                  Connection conn = DriverManager.getConnection("jdbc:hsqldb:file:C:/hsqldb/testdb4/mydb4","sa","");       

7.                  Statement  st = conn.createStatement(); // statement objects can be reused with       

8.                  ResultSet  rs = st.executeQuery("select * from users"); // run the query       

9.                  while(rs.next()){      

10.                  String s1=rs.getString("name");       

11.                  System.out.println(s1);   

12.              }   

13.              st.close();       

14.              st = conn.createStatement();       

15.              st.execute("SHUTDOWN");       

16.              conn.close(); // if there are no other open connection       

17.              }catch(Exception e){       

18.                  e=null;       

19.                  e.printStackTrace();   

20.              }      

21.    

22.      }   

23.  } 

 

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值