精华帖 (1) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (0)
|
|
---|---|
作者 | 正文 |
发表时间:2007-01-09
这种模式的特点有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。 声明:ITeye文章版权属于作者,受法律保护。没有作者书面许可不得转载。
推荐链接
|
|
返回顶楼 | |
发表时间:2007-01-21
以前没有接触过hsqldb,学习
|
|
返回顶楼 | |
发表时间:2007-01-26
从网上下了equinox的代码,运行之后找不到数据库文件
jdbc: jdbc.driverClassName=org.hsqldb.jdbcDriver jdbc.url=jdbc:hsqldb:db/equinox jdbc.username=sa jdbc.password= 从哪里找到equinox的数据库文件? |
|
返回顶楼 | |
发表时间: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。这个错误应该可以解决。 |
|
返回顶楼 | |
发表时间: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。这个错误应该可以解决。 非常感谢。 |
|
返回顶楼 | |
发表时间:2007-01-27
引用 缺省时,数据也是保存在memory中的,如果想要持久化数据,需要在关闭vm之前执行hsqldb的命令 SHUTDOWN。
这个可能是问题的原因。 |
|
返回顶楼 | |
发表时间:2007-01-27
pupi 写道 引用 缺省时,数据也是保存在memory中的,如果想要持久化数据,需要在关闭vm之前执行hsqldb的命令 SHUTDOWN。
这个可能是问题的原因。 |
|
返回顶楼 | |
发表时间:2007-01-27
letle 写道 pupi 写道 引用 缺省时,数据也是保存在memory中的,如果想要持久化数据,需要在关闭vm之前执行hsqldb的命令 SHUTDOWN。
这个可能是问题的原因。 可以看看下面的帖子 http://www.iteye.com/topic/48848 spring mvc step by step这个例子,没有装入数据的过程,而是先用ant 任务将数据库,表,初始数据建好了。 其实letle也可以用这个方法的。 |
|
返回顶楼 | |
发表时间:2007-01-28
谢谢大家,不过我还是搞不明白数据在哪里保存的,如果肯定不是在内存,因为tomcat关闭的时候数据被写入了。但是找不到数据库文件。有兴趣的朋友可以运行一下。下载
|
|
返回顶楼 | |
发表时间:2007-01-29
补充一下(在springside看到的,在hsqldb的官方文档中没有查到):
另外有一种读取jar/classpath中的script文件的In-Process方式,方便发布war时不知道具体路径的情况。不过这种方式是只读不存盘的,利用来单元测试也不错。下面的设置将读取classpath根目录下的db/test.script jdbc:hsqldb:res:/db/test |
|
返回顶楼 | |