2.3. 四种存储方式
hsqldb拥有四种存储数据的方式,之前见过的有mem和hsql,下面来介绍一下它们的用法和区别。
mem,内存(memory)存储方式。
hsqldb启动的时候会在内存中建立对应的表结构,运行期间对数据做出的所有修改都保存到内存中,最后关闭hsqldb的同时,内存中的所有数据也会全部丢失。
然后执行查询,可以看到两条数据已经成功保存进数据库了。
1 lingirl
2 叮咚
mem方式的缺点是每次启动hsqldb都要先创建表结构,插入初始数据,关闭hsqldb的同时数据也会全部丢失。
mem方式的优点是所有操作都在内存中进行,不会生成额外的数据文件,可以保证每次创建的数据库都是绝对干净的,这点对测试来讲很有用。
file,文件存储方式。
hsqldb使用文件保存数据库配置,表结构和更新的数据。
hsqldb运行过程中会生成四个文件,它们的文件名都是与连接url地址对应的,示例02-03/File.java中配置的url为"jdbc:hsqldb:file:db/file",对应的将是db目录下所有以file开头的文件。
file.properties存放数据库配置,包括数据库版本,缓存,表结构设置等等。
file.lck用来标记当前数据库是否已经被某一个hsqldb访问了,同一时间只有一个hsqldb能操作数据库文件,这样才能保证不会出现数据冲突。
这个文件在hsqldb启动时自动生成,正常关闭时会自动删除,但非法关闭会无法删除这个文件,如果因为这个文件出现数据库服务启动的情况,就需要手工删除。
file.script和file.log
hsqldb使用这两个文件保存数据表结构和数据,因为用到了缓存,更新的数据不会直接写入文件,而是在内存中积累一定量后,才会批量写入file.log这个日志文件。
file.script用来保存最终数据,hsqldb正常关闭的时候会把内存和日志文件(file.log)中的数据写入file.script,并删除日志(file.log)文件。
如果出现非正常关闭的情况,内存中缓存的数据会丢失,file.log也无法删除,不过不用担心,下次启动的时候hsqldb会先检测是否有未删除的file.log,将其中的数据写入file.script,再读取file.script中的数据,进行初始化操作。
File.java中的sql语句有了变化,因为使用文件保存了表结构,每次操作之前还是先删除它们比较保险。
多了这条清空语句,我们可以得到与mem相同的查询结果,如果不删除表 ,把插入语句修改成不冲突的形式,我们就可以看到每次查询结果不断增多。因为即使hsqldb关闭了,数据也会保存在文件里。
拜缓存所赐,像我们这样放任hsqldb随jvm关闭,一定会丢失数据,为了这一点,我们在url上加入了特殊标记String url = "jdbc:hsqldb:file:db/file;shutdown=true",保证每次conn.close()都会关闭数据,将数据写入 file.script,相对的也使缓存完全丧失了效果。
当然,也可以向数据库发送shutdown语句,正常关闭数据库。
res,资源存储方式。
它是mem与file两者的结合,我们把res.properties和res.script放到classpath下的db/目录下,对应url = "jdbc:hsqldb:res:/db/res"。数据库启动的时候会去这两个文件里读取数据进行初始化,但不会生成res.lck和 res.log,以后进行的所有操作就都在内存里了,关闭数据库也不会写入res.script。
res就像是使用file提供初始数据的mem内存访问方式,它在系统演示的时候十分方便,设置一次初始数据就可以演示多次,而且不会影响初始数据的结果。用于测试就不太适合了,res.script明显没有sql语句便于维护,还是老老实实用sql导入更合适。
res唯一的限制是不能进行建表和删表的操作,你可以插入,修改,删除数据,但是不能修改表的结构。
hsql,socket访问方式。
使用socket链接,从一个单独运行的hsqldb服务器中获得数据,这个服务器中的hsqldb又可能是这四种存储方式。只要你想,就完全可以做成一条链状结构。
2.4. 正常关闭jdbc
第一种方式,url = "jdbc:hsqldb:file:db/file;shutdown=true",这样每次conn.close()都会执行shutdown命令关闭数据,实际上扼杀了缓存的效果。
另一个方式,在jvm关闭前,向数据库发送shutdown命令,让它正常关闭。
分享到:
相关推荐
通过以上步骤,可以深入了解HSQLDB的内部工作原理,特别是其缓存管理和数据存储机制,从而优化数据库性能,解决潜在问题。在实际应用中,根据需求选择合适的数据表类型,并合理配置缓存,能有效提升HSQLDB的效率。
- **个别数据库属性**:针对每个数据库实例可以配置的属性,如缓存大小等。 #### 七、部署问题 - **操作模式**:包括SERVER模式和In-Process模式。 - **表**:介绍了不同类型的表及其用途。 - **大对象**:支持存储...
此外,合理设置缓存策略、批处理等也是提高性能的有效手段。 综上所述,HSQldb与Hibernate的整合为开发提供了一个快速、便捷的数据库操作环境,特别适合于测试和学习。通过Myeclipse 6.5项目,你可以深入理解这一...
通过本手册,读者将了解到如何运行HSQLDB、如何处理SQL问题以及如何在不同环境下部署HSQLDB等。 - **文档格式**:本手册提供了多种格式供用户选择,包括PDF、HTML以及源码格式等,方便用户根据自己的需求进行阅读。 ...
### Hsqldb 使用详解 #### 1. 概述与组件介绍 Hsqldb是一款开源、类型安全且高性能的关系型数据库管理系统。它支持标准的SQL语法,并提供了多种使用模式,适用于开发过程中的不同需求场景。Hsqldb的核心功能由`...
本文将深入探讨HSQldb 1.8.0_2的核心特性、安装与配置、使用方法以及常见问题。 1. **核心特性** - **全SQL支持**:HSQldb支持SQL-92和SQL:2003标准,提供了丰富的SQL语句支持,包括复杂的查询、视图、存储过程等...
6. **性能调优**:根据应用需求调整内存大小、磁盘缓存设置等参数,以优化性能。 7. **安全管理**:定义用户角色,设置权限,保护数据库免受未经授权的访问。 通过深入学习《HSQLDB_guide_zh(HSQLDB中文手册).pdf...
- **数据库属性配置**:通过SQL命令来配置数据库的各种属性,例如缓存大小、日志级别等。 #### 六、部署问题 - **操作模式与表**:讨论不同操作模式下的表设计与管理策略。 - **内存与磁盘使用**:提供关于如何...
标题 "tomcat_with_jdk_hsqldb_springboot.rar相关软件" 暗示了这是一个包含用于开发和运行Java Spring Boot应用的环境的压缩包。这个压缩包包含了多个关键组件,如Tomcat服务器、JDK(Java Development Kit)、...
文档“J2EE企业级项目开发-1期 05 hibernate二级缓存实战经验.doc”探讨了Hibernate二级缓存的实战应用,这对于提高应用程序性能和减少对数据库的频繁访问至关重要。 **Hibernate二级缓存** 二级缓存是Hibernate...
2. **性能优化**:合理设置缓存大小,避免频繁磁盘I/O。 3. **并发冲突**:在多线程环境中,正确管理和同步数据库访问,避免数据不一致。 总结,HSQDB作为一款优秀的Java数据库,以其轻量级、高效和灵活的特性,在...
**标题解析:** "Back_HSqlDB:...通过深入学习和实践"Back_HSqlDB",开发者不仅可以掌握HSQLDB的使用,还能提升在Java环境中处理数据库问题的能力。同时,对于理解JDBC、数据库设计和事务处理等核心概念也有很大帮助。
内存数据库,例如HSQLDB或H2,是在内存中运行的轻量级数据库,适合用于测试和快速原型开发。它们可以极大地加速数据读写速度,因为无需频繁进行磁盘I/O操作。 EhCache是Java的分布式缓存解决方案,它能够存储对象并...
####JPA Hibernate Entity Listener ##Recipe 18(Spring 缓存抽象) 在本节中,您将看到如何使用 EntityListener 我们将使用基于注解的方法。 使用 hsqldb 2.3.3 版本全面支持 JDBC 3.0 构建依赖 要求 版本 ...
<property name="JDBC.ConnectionURL" value="jdbc:hsqldb:data/tutorial"/> <property name="JDBC.Username" value="sa"/> <property name="JDBC.Password" value=""/> </dataSource> ...
它不仅实现了JPA规范,还提供了许多额外的功能,如缓存机制、事务管理和对象查询语言(HQL)。 5. **JSF (JavaServer Faces)**:JSF是Java EE的Web组件框架,它为创建用户界面提供了一种声明式的方法。JSF组件可以...
默认情况下,它会自动管理缓存,但也可以通过设置`hsqldb.cache_rows`等参数自定义缓存大小。 ### 五、事务管理 HSQL DB支持ACID(原子性、一致性、隔离性和持久性)事务特性。可以使用JDBC的`Connection`对象的`...
SharpHSQL可能提供了与HSQLDB(一个纯Java的SQL数据库引擎)类似的接口,使得开发者能在C#环境中模拟或连接到HSQLDB服务器,或者提供了一个与HSQLDB兼容的数据库访问层。 至于"sharphsql_cache",这可能指的是...
这种数据库因为数据读写速度快,响应时间短,适用于处理大量实时数据的场景,如高速缓存、实时分析等。本示例将围绕如何在Java中使用内存数据库进行演示。 在Java中,一个常见的内存数据库是HSQLDB(HyperSQL ...