`
pupi
  • 浏览: 438669 次
  • 性别: Icon_minigender_1
社区版块
存档分类
最新评论

谈一下纯java数据库hsqldb的standalone(in-process)模式

阅读更多
在hsqldb的官方文档中,介绍standalone的篇幅很少,总共100多页的文档,这种模式只有不到一页。本来这种模式用到的机会比较小,但碰巧这两天看spring mvc(spring官方的那个step-by-step的例子),这个例子中的hsqldb正是运行在standalone模式下。

这种模式的特点有2个。
第一个特点,顾名思义,standalone。也就是这个数据库是可以不依赖其它任何东西,独立存在,包括数据库引擎。和in-memory模式相比,这种模式的数据是可以持久化的,存在形式就是几个文件。和server方式比,要使用这种模式下的数据库不需要启动任何的server或者监听。
第二个特点,同样可以顾名思义,in-process。这种模式下,数据库引擎和应用程序跑在一个jvm中。对大部分应用,这种模式可以加快速度,因为数据不再需要在网络中传输。但是这种方法也有个缺点,就是process之外的程序,比如database manager,无法看到数据库中的数据。

hsqldb官方推荐:开发的时候用server模式,部署到实际生产环境的时候才用standalone模式。

下面是springmvc step by step中的例子:

数据库配置信息:
db.driver=org.hsqldb.jdbcDriver
db.url=jdbc:hsqldb:db/test
db.user=sa
db.pw=

上面第二行就隐含了hsqldb要运行在standalone模式下。也可以写成如下的方式:
db.url= jdbc:hsqldb:file:c:/eclipse/springmvc/db/test 



ant 任务:

    <target name="loadData">
        <echo message="LOAD DATA USING: ${db.driver} ${db.url}"/>
        <sql driver="${db.driver}"
             url="${db.url}"
             userid="${db.user}"
             password="${db.pw}"
             onerror="continue">  
            <classpath refid="master-classpath"/>

        INSERT INTO products (id, description, price) values(1, 'Lamp', 5.78);
        INSERT INTO products (id, description, price) values(2, 'Table', 75.29);
        INSERT INTO products (id, description, price) values(3, 'Chair', 22.81);
        COMMIT;
        SHUTDOWN

        </sql> 
    </target>


    <target name="clearData">
        <echo message="CLEAR DATA USING: ${db.driver} ${db.url}"/>
        <sql driver="${db.driver}"
             url="${db.url}"
             userid="${db.user}"
             password="${db.pw}"
             onerror="continue">  
            <classpath refid="master-classpath"/>

        DELETE FROM products;

        </sql> 
    </target>		

在每次单元测试之前,先执行clearData和loadData这两个任务。这样可以重新构造正确的测试数据。(maybe用in-memory模式更理想)

另外,有一点需要特别注意的。

缺省时,数据也是保存在memory中的,如果想要持久化数据,需要在关闭vm之前执行hsqldb的命令 SHUTDOWN。


分享到:
评论
17 楼 pupi 2007-02-03  
在eclipse中跑起来这个应用了。
数据库文件就是在${eclipse_home}/下呀。
16 楼 pupi 2007-02-03  
总算可以运行了。

可是点add user按钮,点view demonstration按钮均无反应。后台也没有错误。

另外,这个有没有源代码可以提供?

上equinox官网看,其默认数据库是 postgresql呢,不是hsqldb。
15 楼 pupi 2007-02-02  
letle 写道

我下了就没问题呀,又新传了一个可以试一下。equinox-struts.war


还是不可以。是winrar的版本问题?我的是3.5
14 楼 letle 2007-02-02  
pupi 写道
letle 写道
<p><font face="Arial">谢谢pupi,我在eclipse的目录下也没找到那个db目录,可以下载<a href="http://dev.iseasky.com/attachment.php?aid=134">equinox-struts.war</a>运行一下看db在哪,并且数据被保存。</font></p>
<p>我百思不得其解。</p>
下载回来的文件打不开呢。


我下了就没问题呀,又新传了一个可以试一下。equinox-struts.war
13 楼 pupi 2007-02-01  
letle 写道
<p><font face="Arial">谢谢pupi,我在eclipse的目录下也没找到那个db目录,可以下载<a href="http://dev.iseasky.com/attachment.php?aid=134">equinox-struts.war</a>运行一下看db在哪,并且数据被保存。</font></p>
<p>我百思不得其解。</p>
下载回来的文件打不开呢。
12 楼 letle 2007-02-01  
<p><font>谢谢pupi,我在eclipse的目录下也没找到那个db目录,可以下载<a href='http://dev.iseasky.com/attachment.php?aid=134'>equinox-struts.war</a>运行一下看db在哪,并且数据被保存。</font></p>
<p>我百思不得其解。</p>
11 楼 pupi 2007-01-31  
letle 写道
从网上下了equinox的代码,运行之后找不到数据库文件
jdbc:
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:db/equinox
jdbc.username=sa
jdbc.password=
从哪里找到equinox的数据库文件?



数据库文件应该在你的eclipse安装目录下。
10 楼 letle 2007-01-30  
pupi 写道
补充一下(在springside看到的,在hsqldb的官方文档中没有查到):

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

jdbc:hsqldb:res:/db/test
呵呵,这种方法也不错,只是数据不保存。
9 楼 pupi 2007-01-29  
补充一下(在springside看到的,在hsqldb的官方文档中没有查到):

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

jdbc:hsqldb:res:/db/test
8 楼 letle 2007-01-28  
<font>谢谢大家,不过我还是搞不明白数据在哪里保存的,如果肯定不是在内存,因为tomcat关闭的时候数据被写入了。但是找不到数据库文件。有兴趣的朋友可以运行一下。<a href='http://dev.iseasky.com/attachment.php?aid=134'>下载</a></font>
7 楼 pupi 2007-01-27  
letle 写道
pupi 写道

引用
缺省时,数据也是保存在memory中的,如果想要持久化数据,需要在关闭vm之前执行hsqldb的命令 SHUTDOWN。


这个可能是问题的原因。
但是应用启动的时候怎么装入数据呢?



可以看看下面的帖子
http://www.iteye.com/topic/48848

spring mvc step by step这个例子,没有装入数据的过程,而是先用ant 任务将数据库,表,初始数据建好了。

其实letle也可以用这个方法的。
6 楼 letle 2007-01-27  
pupi 写道

引用
缺省时,数据也是保存在memory中的,如果想要持久化数据,需要在关闭vm之前执行hsqldb的命令 SHUTDOWN。


这个可能是问题的原因。
但是应用启动的时候怎么装入数据呢?
5 楼 pupi 2007-01-27  

引用
缺省时,数据也是保存在memory中的,如果想要持久化数据,需要在关闭vm之前执行hsqldb的命令 SHUTDOWN。


这个可能是问题的原因。
4 楼 letle 2007-01-27  
pupi 写道
letle 写道
从网上下了equinox的代码,运行之后找不到数据库文件
jdbc:
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:db/equinox
jdbc.username=sa
jdbc.password=
从哪里找到equinox的数据库文件?


equinox没有用过。
从jdbc.url可以看出,equinox里面用到的数据库也是运行在standalone模式之下的。
并且暗示,运行equinox的目录下有一个db的子目录,其中应该已经建立一个equinox的standalone的数据库。

因为提示是没有找到数据库文件。有2种可能:
1. 压根没有建立这个数据库。可以通过搜索文件equinox.* 来确认,如果没有找到。那就说明确实没有建立。找到equinox的数据库脚本,建立之。
2. 建立了数据库,但是路径不对。其实standalone的数据库的url可以指定绝对路径的。如:
jdbc.url=jdbc:hsqldb:file:${your_equinox_install_dir}/db/equinox


按照绝对路径,设置好jdbc.url。这个错误应该可以解决。
不是应用提示没有找到数据库文件,而是运行的正常,而且数据都写入了,但是在equinox的目录下我找不到数据库文件,没有db的目录,也没有*.script的文件,好困惑。
   非常感谢。
3 楼 pupi 2007-01-26  
letle 写道
从网上下了equinox的代码,运行之后找不到数据库文件
jdbc:
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:db/equinox
jdbc.username=sa
jdbc.password=
从哪里找到equinox的数据库文件?


equinox没有用过。
从jdbc.url可以看出,equinox里面用到的数据库也是运行在standalone模式之下的。
并且暗示,运行equinox的目录下有一个db的子目录,其中应该已经建立一个equinox的standalone的数据库。

因为提示是没有找到数据库文件。有2种可能:
1. 压根没有建立这个数据库。可以通过搜索文件equinox.* 来确认,如果没有找到。那就说明确实没有建立。找到equinox的数据库脚本,建立之。
2. 建立了数据库,但是路径不对。其实standalone的数据库的url可以指定绝对路径的。如:
jdbc.url=jdbc:hsqldb:file:${your_equinox_install_dir}/db/equinox


按照绝对路径,设置好jdbc.url。这个错误应该可以解决。
2 楼 letle 2007-01-26  
从网上下了equinox的代码,运行之后找不到数据库文件
jdbc:
jdbc.driverClassName=org.hsqldb.jdbcDriver
jdbc.url=jdbc:hsqldb:db/equinox
jdbc.username=sa
jdbc.password=
从哪里找到equinox的数据库文件?
1 楼 ll_2046 2007-01-21  
以前没有接触过hsqldb,学习

相关推荐

    hsqldb学习包括数据库创建启动配置等

    2. **In-Process(Standalone)模式**:此模式下,数据库仅在当前线程中运行,速度较快,但不支持多线程访问。 3. **In-Memory模式**:数据存储在内存中,不持久化到磁盘,适用于临时测试。 **HSQldb管理工具**: ...

    HSQLDB快速连接数据库

    - **轻量级**:作为一个纯Java数据库,HSQLDB无需额外的服务器软件即可运行。 - **高性能**:尽管体积小巧,但在数据处理速度方面表现优异。 - **兼容性**:支持大部分SQL-92及部分SQL-99标准特性,并且与JDBC API...

    hsqldb快速入门

    2. **In-Process(Standalone)模式**:当应用程序启动时,数据库也启动,适用于单线程或本地开发。JDBC连接示例: ```java Connection c = DriverManager.getConnection("jdbc:hsqldb:file:/opt/db/testdb", "sa...

    hsqldb使用(转载)

    - **In-Process (Standalone)模式**:在这种模式下,数据库与应用程序在同一进程中运行,访问速度最快。但是,它仅限于当前进程,其他工具无法同时访问。JDBC连接字符串类似于`jdbc:hsqldb:file:/opt/db/testdb`。 ...

    HSQLDB中文帮助文档

    - **In-Process (Standalone)模式**:适合单个JVM内使用。 - **Memory-Only数据库**:数据仅存在于内存中,不会持久化保存。 - **基本操作**: - **关闭数据库**:使用`SHUTDOWN`命令或API。 - **创建新数据库**...

    HSQLDB 中文文档

    HSQLDB支持多种运行模式,包括SERVER模式、In-Process(Standalone)模式等。 - **SERVER模式**: - 使用`HsqldbServer`启动服务端。 - 可以通过`HsqldbWebServer`和`HsqldbServlet`来提供Web界面和Servlet支持。...

    HSQLDB用户指导学习手册

    - **服务器模式**:涵盖了HSQLDB支持的各种服务器模式,包括HSQLDB Server、HSQLDB Web Server、HSQLDB Servlet以及In-Process(Standalone) Mode等。每种模式都有其特定的应用场景和优势。 - **HSQLDB Server**:...

    HSQLDB中文手册

    - **In-Process(Standalone)模式**:HSQLDB可以直接嵌入到应用程序中运行,不需额外的服务器进程,简化了部署流程。 - **Memory-Only数据库**:在内存中运行的数据库实例,提供极高的读写性能,但数据不会持久化保存...

    HSQLDB 用户指南学习资料

    - **In-Process(Standalone)模式**:适合于单个Java应用内部使用,无需额外的网络配置。 - **Memory-Only数据库**:所有的数据都存储在内存中,适用于测试或快速原型设计。 - **数据库操作** - **启动和关闭...

Global site tag (gtag.js) - Google Analytics