Java学习:HSQLDB文档(一)

近来研究HSQLDB,就尝试翻译了一下它的文档,这里贴出来和大家共享,欢迎大家和我交流:wwccff@163.net
  

一 什么是HSQLDB?
  
  HSQLDB具有以下特点:
  
  是一个开放源代码的JAVA数据库
  
  具有标准的SQL语法和JAVA接口
  
  HSQLDB可以自由使用和分发
  
  非常简洁和快速的
  
  具有内存数据库,独立数据库和C/S数据库三种方式
  
  可是在APPLET中使用
  
  更多的细节:
  
  索引可以被创建和自动使用
  
  支持事务处理
  
  允许表关联
  
  完整性引用和约束
  
  支持JAVA存储过程和函数
  
  数据库可以生成SQL脚本
  
  使用用户名,密码,访问权限等安全机制
  
  可以被JAVA1.1和JAVA2编译
  
  建立在HypersonicSQL基础上的HSQLDB,是一个通用目的的数据库,非常的小,而且易于安装和使用。可以用于APPLETS中 ,测试中,应用系统中。

  由于提供了标准SQL和JDBC接口,HSQLDB可以方便的和其他数据库之间进行数据转换。
  
  HSQLDB的当前最新版本是1.7.1,以压缩包的形式提供,包括可以使用的JAR文件,文档,源代码,测试程序,例子等。
  
  二 操作模式介绍
  HSQLDB有两种操作模式:
  
  进程内模式(只用在同一个JVM里的应用程序才可以访问数据库)
  
  C/S模式(多个计算机/系统可以访问同一个数据库)
  
  进程内访问模式
进程内访问模式也就是独立模式。这里的独立模式是相对于C/S模式(客户端程序访问数据库服务器)而言的。这里,数据库和应用程序运行在同一个JVM下。这个时候的数据库实际上就是相当于被应用程序调用的代码库。程序和数据库通过通用的JDBC调用进行通讯,但是这种调用是内部调用,不需要通过网络通讯。
  
  在这个模式下,同一时间一个数据库只能有一个应用程序访问,否则,就要使用C/S模式(允许多个JVM或者计算机在同一时间访问同一个数据库)。
  
  这种模式下的JDBC的URL如下:
  
  jdbc:hsqldb:test
  
  这里,test是数据库文件名。另一个例子(WINDOWS系统下):
  
  jdbc:hsqldb:c:db est
  
  C/S访问模式
  
  这种模式下数据库和应用程序不是运行在同一个JVM进程下,而是有自己独立的进程或者是独立的机器。 不需要客户端程序进入服务器的文件系统。这种模式下的数据库操作模式和一些大的数据库(比如SQL SERVER,ORACLE等)没什么区别的。可以在INTERNET或者INTRANET。
  
  HSQLDB除了有自己的访问协议,还支持标准的HTTP协议,从而可以穿越防火墙或者代理服务器来访问数据库。
  
  In all Server modes the actual database file name is specified in the Java command that starts the server. This can be the dot "." for all-in-memory operation or the path for the database name
  
  服务器模式一共有三种:SERVER,WEBSERVER和SERVLET。
  
  SERVER
  
  这种模式下的通讯协议是建立在TCP/IP基础上的HSQL专有协议。每个客户端都有一个独立的连接。这种模式的响应速度是非常快的,如果使用C/S模式,应该更多的采用这种服务模式。
  
  这种模式下的JDBC URL是:
  
  jdbc:hsqldb:hsql://hsqldbsrv
  
  这里,hsqldbsrv是机器名称。如果一台机器上跑多个服务器,需要指定端口,例如:jdbc:hsqldb:hsql://hsqldbsrv:9002,如果是本地计算机,则使用localhost:jdbc:hsqldb:hsql://localhost。
  
  WEBSERVER
  
  有些时候,由于防火墙或者代理服务器的存在,需要使用HTTP协议进行通讯,系统提供一个小而简单的WEBSERVER用来相应针对数据库的查询,例如:
  
  jdbc:hsqldb:http://websrv
  
  SERVLET
  
  这种模式和WEBSERVER模式很类似,数据库运行在一个SERVLET里,而SERVLET可以运行在几乎所有的WEBSERVER里。而且和JAVA SERVLETE API兼容(测试环境是J2DK2.1)。这是通过网络直接访问的。如果你的SERVLET不能直接访问这个数据库,就不要使用这种模式。
全内存访问(All-In-Memory)模式
  
  所谓全内存访问模式,就是所有的数据(包括索引和记录)都保存在主内存里。这意味着数据库的大小是受到内存大小的限制的(不能超过内存的大小)。支持这种模式的原因是:
  
  在非日志模式下,这种模式稍微快些
  
  可以在APPLET下使用
  
  用来存储临时数据(应用系统的数据缓存)All-In-Memory
  
  JDBC URL如下:
  
  jdbc:hsqldb:.
  
  内存和硬盘结合访问模式
  
  在这种模式下,数据库的改变会写入到硬盘中,这就意味着在数据库启动时,内存里的表会根据他们的数据重新创建。或者说,可以创建表来保存数据,在访问数据库时,只有少量记录时保存在内存里的。可以在创建的时候使用´CREATE CACHED TABLE´来代替´CREATE TABLE´。从而支持大表(这些表的记录相对于内存来说太大了)。被缓存的表的索引也可以保存到硬盘中。因此,数据库的大小就可以不受到内存大小的限制。进入缓存表要比从内存表里获取数据要慢些。从1.7.0版本开始,支持第三种模式:数据可以存储在文本文件(如CSV格式的文件)中。对应的语句时:´CREATE TEXT TABLE´。
  
  在关闭数据库前,当前状态会被保存到磁盘中。缓存表中的数据会被保存到一个单独的文件中。启动HSQLDB时,数据库从磁盘中载入数据(SQL脚本被执行),如果数据库被毁坏(比如使用Ctrl+C或者断电),数据也不会丢失。这是因为当下次数据库重新启动时,它使用脚本恢复到最近一次(有脚本文件的那次)的状态。
  
  混合绑定模式
  
  所有的模式都可以在一个程序里使用,系统可以在统一时间使用这四种模式,去连接四种不同的数据库,例如:
  
  c1=DriverManager.getConnection("jdbc:hsqldb:.","sa","");
  c2=DriverManager.getConnection("jdbc:hsqldb:test","sa","");
  c3=DriverManager.getConnection("jdbc:hsqldb:http://dbserver","sa","");
  c4=DriverManager.getConnection("jdbc:hsqldb:hsql://dbserver","sa","");
  
  在这个例子中,四个连接被打开:
  
  c1是内存数据库;c2打开的是本地数据库test;c3使用http协议连接dbserver数据库;c4也是连接dbserver机器,但是使用的是更快的hsql协议。这里的限制就是:只有一个进程内的全内存进程是可用的。
比较
  
  每种模式或配置都有不同的细节和好坏两个方面:
  
  事务处理
  
  对于webserver和servlet模式而言,由于HTTP协议是无状态的,因此,每个查询数据库都建立新的连接。每次查询都需要发送用户名和密码到数据库中,然后建立一个新的连接,同时也建立一个新的事务(因为事务是绑定到连接中的)。可以使用’cookies’,但是现在还没有实现。
  
  并发访问
  
  SERVER模式允许系统和管理工具(比如DatabaseManager同时访问数据库)。
  
  数据库性能优化因素
  
  内存数据库不需要访问系统,因此是最快的。其他模式的数据库需要访问文件系统,每个INSERT/UPDATE/DELETE操作都要保存到磁盘中,因此速度慢些。如果select和delete查询命中了缓存表的信息,则速度几乎和内存表速度一样快,否则就要慢许多(因为要和操作系统的文件系统交互)。
  
  每个statement的传输时间
  
  在SERVER模式,每个statement都需要通过TCP/IP协议传送到服务端,然后将结果返回到客户端。而webserver和servlet模式则需要更多的时间,因为每次statement都需要重新建立连接。相对照的,进程内模式则是在一个系统内部传送数据,就快多了。
  
  以APPLET方式运行
  
  这就是全内存操作。
 

时间: 2024-10-27 15:04:08

Java学习:HSQLDB文档(一)的相关文章

研究 Java 中 XML 文档模型的特性和性能

xml|性能 Java 中的 XML: 文档模型,第一部分:性能 研究 Java 中 XML 文档模型的特性和性能 文档选项 将此页作为电子邮件发送 最新推荐 Java 应用开发源动力 - 下载免费软件,快速启动开发 级别: 初级 Dennis M. Sosnoski, 总裁, Sosnoski Software Solutions, Inc. 2001 年 9 月 01 日 在本文中,Java 顾问 Dennis Sosnoski 比较几个 Java 文档模型的性能和功能.当选择模型时,无法做

java-关于Java中jdk文档的使用问题

问题描述 关于Java中jdk文档的使用问题 本人初学java,最近在学习使用jdk文档,但是对于其中的一些术语不是很懂,求教各位 File[] file = dir.listFiles(); 这条语句我不懂,所以我查了File类的listFiles的方法,但是里面是这样介绍的:" 返回一个抽象路径名数组,这些路径名表示此抽象路径名表示的目录中的文件" 看了具体的返回值,是File[]类型的,由于我是初学,所以我认为: int [] a = new int[n]这个应该是定义一个数组的

怎么用java实现doc文档模板插入数据和表格并导出?急急急,在线等

问题描述 怎么用java实现doc文档模板插入数据和表格并导出?急急急,在线等 我要实现一个模板导出功能,模板包含标题和文字内容,模板中间还有一个表格,和结尾文字.要实现动态添加标题文字,其中表格中内容部分动态添加数据,可能会有多种模板,区别是表格样子不同,都要添加内容,最后整个导出doc文件.有没有demo?各位大神?谢谢了先.下面图片中红色框住部分是要动态添加数据的地方,其他地方是模板原型. 解决方案 下面是我实现的方式,用poi工具. /** * * @param filePath 源文件

java导出pdf文档合并问题

问题描述 java导出pdf文档合并问题 需求:单个pdf能够导出,现在的问题就是如何实现在下载多个pdf文档时候实现pdf文档的合并 解决方案 Java和iText导出pdf文档使用java生成pdf文档(2)java生成pdf文档 解决方案二: 对于多个文档的操作为什么不考虑打包呢,使用ZIP打包就好了啊.如果你一定要将多个PDF文档合变成一个的话,那就写的时候指定从哪里开始写.

java-怎么使用Java将word文档转化为xml文档?

问题描述 怎么使用Java将word文档转化为xml文档? 就是提交上word文档,将word文档转为可以直接使用的xml文档,不是直接修改后缀名的 解决方案 IO读取word,解析内容,拼写xml,IO写入xml. 解决方案二: 把word文档解析出来,重新构建想要的XML格式,然后写出文件 解决方案三: 搞个开元项目 poi 或者 jacob 然后在转xml

java 读取pdf文档中的表格数据

问题描述 java 读取pdf文档中的表格数据 如题,如何使用Java读取PDF表格中的数据!跪求帮助,在线等回复,急!急!急! 解决方案 用Java读取pdf中的数据用Java读取pdf中的数据用Java读取pdf中的数据 解决方案二: 读出来就行,还是一行一条数据 解决方案三: http://bbs.csdn.net/topics/320171930 解决方案四: 要是实在不行先转换了啊

java读取word文档并显示在页面上

问题描述 java读取word文档并显示在页面上 我是一名java菜鸟,现在f盘有一word文档,我想用java读取(在action中写读取方法)并显示在jsp页面上,请问该如何处理? 解决方案 新手的话不建议你这样试,如果练习jar包的功能,可以练习读取.修改.追加等.如果必须这样,可以网上查查在html中嵌入一段代码可以利用office组件在html中显示word文档.网上如:百度文库,都不是这样做的,是第过软件把doc,xls等文件生成.flv通过flash播放器在页面上显示的.

java生成word文档问题

问题描述 java生成word文档问题 如图,java操作word时怎么修改这些信息(来源中的程序名称这些) 解决方案 http://daimami.com/office/77961.htm 类似这样的代码 sumInfo.getApplicationName() 解决方案二: 这个要利用第三方的sdk才能实现,java本身没有方法

java-使用Java导出excel文档,为何数据库中int类型的导出不成功?

问题描述 使用Java导出excel文档,为何数据库中int类型的导出不成功? 导出工具类 package com.lovefly.util; import java.io.IOException; import java.io.OutputStream; import java.lang.reflect.Field; import java.util.List; import jxl.Workbook; import jxl.write.Label; import jxl.write.Writ