1、启 动 和 使 用 H2管 理 系 统设 置 H2管 理 系 统通 过 JDBC 连 接 到 数 据 库创 建 一 个 新 的 数 据 库使 用 服 务 器 模 式使 用 Hibernate使 用 TopLink 和 Glassfish使 用 EclipseLink在 WEB 应 用 中 使 用 数 据 库CSV (逗 号 分 隔 文 件 )的 支 持升 级 ,备 份 ,和 恢 复命 令 行 工 具使 用 OpenOffice 基 础 框 架使 用 / JNLP 启 动 JAVA WEB使 用 连 接 池全 文 检 索用 户 自 定 义 变 量日 期 和 时 间使 用 Spring使用和启动
2、H2管理系统H2管理系统让你能够通过一个浏览器对 H2的 SQL 数据库进行管理操作。H2 管理系统不仅可以连接 H2数据库,也可以连接其他支持 JDBC 接口的数据库。这是一个 B/C/S 应用,在服务器和浏览器上都要运行 H2的管理程序。根据平台不同,H2管理系统支持多种启动应用的方式。在 windows 上有两种方式启动 H2管理系统方式一:单击开始, 程序 ,H2 ,和 H2 Console (Command Line)。当使用 SUN JDK1.5时,一个标题为H2 Console的窗口将弹出。当使用 SUN JDK1.6时,一个数据库图标将被加入 WINDOWS 到系统托盘。如果既
3、无窗口弹出也没有图标加入到系统托盘,很可能是你的 JDK 没有正确安装(如果确认自己的 JDK 安装正确,可以尝试用另外一种方式启动控制台) 。另外一个浏览器窗口将被打开,指向的 URL 是 http:/localhost:8082,是 H2管理系统的登录页面。方式二:打开文件浏览器,切换目录到 h2/bin,双击运行 h2.bat。一个控制台窗口将弹出,如果有问题,将有错误信息在这个窗口里显示。一个浏览器窗口将被打开,指向的 URL是 http:/localhost:8082,是 H2管理系统的登录页面。其他操作系统启动 H2管理系统方式一:双击 h2*.jar 文件,如果.jar 文件能正
4、确的被 java 打开。方式二:打开一个控制台窗口,切换目录到 h2/bin,执行命令: java -cp h2*.jar org.h2.tools.Server防火墙在你启动服务时,如果你安装了防护墙,你可能会收到一个防护墙的安全警告。如果不需要其他计算机访问你这台计算机上的 H2数据库,你可以让防火墙阻塞 H2对外服务的端口,但是本地计算机仍可以访问这些端口。当你需要其他计算机也能访问这台计算机的 H2数据库时,你需要让防火墙开放 H2对外服务的端口。有报告显示使用卡巴斯基7.0的防火墙时,使用 IP 地址访问本地的 H2时,速度非常的缓慢,替代的方案是使用localhost代替 IP 地
5、址来访问。一个简单的防火墙已经集成到 H2的服务器中,其他的计算机缺省状态下不能连接到服务器,如果需要其他计算机能连接到 H2服务器,到Preferences (偏好) ,选择Allow connections from other computers(允许从其他计算连接)即可。JAVA 测试打开一个命令行窗口,输入下面的命令,检测 JAVA 的版本:java -version如果你得到错误的信息,你可能未安装 JDK,或是需要将 JAVA 的可执行文件路径加入到环境变量 PATH 中。错误信息Port may be in use(端口被占用)你可能在启动一个 H2控制台实例时,出现错误信息
6、“The Web server could not be started. Possible cause: another server is already running.“.(WEB 服务器不能启动,可能的原因:另外一个服务器已经在运行了) 。使用不同的端口,可以在一台计算机上启动多个控制台程序 ,但是一般都不被这么要求。使用其他端口如果端口已经被其他应用占用,你需要使用其他端口来启动 H2控制台。改变 H2的控制台端口需要修改配置文件.h2.server.properties 。这个文件存储在用户目录下( 在 Windows 系统中,这个文件通常在 Documents and Sett
7、ings/)。这个相应的入口实体是 webPort.使用浏览器连接到服务器服务器启动成功后,你就可以使用 WEB 浏览器访问服务,浏览器需要支持 JavaScript。在启动的服务器上启动浏览器,打开 URL http:/localhost:8082。在启动服务器之外的计算机上,你需要提供启动服务器的 IP 地址,如 http:/192.168.0.2:8082.如果你在服务器上启用了SSL, URL 需要使用 https:/开头.多个并发会话支持多个并发的浏览器会话。由于数据对象是存储在服务器上的,同时工作的会话数受限于服务器的内存。登录在登录页,你提交连接信息就可以登录到数据库。设置 JD
8、BC 作为连接数据库的驱动,填入 JDBC URL、用户名、密码,单击Connect。你能保存和恢复以前设置的信息,这些设置都存储在属性文件中。错误信息错误信息用红色标识,你能通过单击消息显示或隐藏异常的堆栈信息。附加数据库驱动通过增加 JAR 的本地驱动文件到环境变量来附加数据库驱动。环境变量包括 H2DRIVERS 和 CLASSPATH,以 WINDOWS 为例:如要增加数据库驱动“C:Programshsqldblibhsqldb.jar”,设置环境变量H2DRIVERS=C:Programshsqldblibhsqldb.jar。多个驱动可以被设置,每个驱动之间通过;分号分隔(WIN
9、DOWS ) ,其他系统通过: 冒号分隔。在路径中空格被支持,但是这些设置不能被引用。使用 H2控制台H2控制台主页面分为三个主要的部分:顶部的工具栏,左边的是对象树,右边的是查询和结果输出栏。数据库对象(如表)都被列在左边的树形上。在查询栏上输入 SQL 语句点击Run,结果就被输出到命令行的下面。增加表名和字段名可以通过在树上点击增加表名和字段名。如果单击表,当这个查询栏是空的时候, ” SELECT * FROM “将被自动增加到查询栏。当输入一个表的查询时,对象树上将自动的展开这张表。例如,你输入 SELECT * FROM TEST T WHERE T,对象树上的表 TEST 将自动
10、的展开。断开连接和停止应用断开数据库,点击工具栏上的 Disconnect 即可,这个时候,数据库服务仍在继续运行,等待着一个新的会话进行连接。停止服务需要右键点击系统托盘的 H2图标,选择 Exit。如果没有系统托盘的 H2图标,切换到Preferences单击Shutdown,在 WINDOWS 上在服务器启动的窗口下按Ctrl+C,或者直接关闭 WINDOWS 上的控制台窗口。设置 H2控制台H2控制台的设置信息存储在配置文件 .h2.server.properties,该文件存放在你的用户目录下。在 WINDOWS 上,用户目录通常是 C:Documents and Settingsu
11、sername。H2 控制台第一次启动时将自动创建应用所需要包含的配置文件。 使用 JDBC 连接到数据库JAVA 应用要连接到数据库,首先需要加载数据库驱动,然后获得一个数据库连接,下面是一个简单的例子:import java.sql.*;public class Test public static void main(String a)throws Exception Class.forName(“org.h2.Driver“);Connection conn = DriverManager.getConnection(“jdbc:h2:/test“, “sa“, “);/ add ap
12、plication code hereconn.close();代码中通过 Class.forName(.)来加载驱动,通过 DriverManager.getConnection()来打开一个连接,驱动名为“org.h2.Driver“。数据库 URL 总是使用 jdbc:h2:来标识,getConnection() 的第二个参数是用户名(sa 作为系统超级管理员的一个例子) ,第三个参数是密码,用户名是不区分大小写,但是密码是大小写区分的。创建新一个新数据库缺省情况下,如果 URL 指定的数据库并不存在,一个新的空的数据库将被自动的创建。创建数据库的用户自动成为这个数据库的超级管理员。自动
13、创建新库也可以通过特殊的 URL 进行屏蔽,参见打开一个存在的数据库。使用服务器模式H2目前支持三种服务器模式: WEB 服务器模式(H2 控制台) 、TCP 服务器模式(C/S 连接)和 PG 服务器模式(PostgreSQL 客户端) 。可以通过多种方式启动服务器模式,通常的方式是通过服务器工具。通过命令行启动服务器工具缺省设置下,输入下面命令并执行能启动服务器工具:java -cp h2*.jar org.h2.tools.Server通过下面的命令行,可以查看服务器启动命令行的参数及缺省值:java -cp h2*.jar org.h2.tools.Server -?参数允许服务器工具
14、启动到其他端口或者只是部分启动。连接到 TCP 服务器要连接另一台计算机的的数据库,只能通过 TCP 方式进行连接,使用下面的连接驱动和数据库 URL: JDBC 驱动类: org.h2.Driver 数据库 URL: jdbc:h2:tcp:/ip/test关于数据库 URL,看数据库 URL 说明。在应用内部启动 TCP 服务在 JAVA 应用内部,也可以通过代码来实现 TCP 服务的启动和停止,例子代码如下:import org.h2.tools.Server;./ start the TCP ServerServer server = Server.createTcpServer(ar
15、gs).start();./ stop the TCP Serverserver.stop();外部程序停止 TCP 服务TCP 服务能被另外的进程停止,通过命令行停止 TCP 服务的命令如下:java org.h2.tools.Server -tcpShutdown tcp:/localhost:9092通过在程序中添加下面的代码,也可以在另外的进程中停止 TCP 服务:org.h2.tools.Server.shutdownTcpServer(“tcp:/localhost:9094“);这个方法仅能停止 TCP 服务,如果进程内的其他服务还在运行,他们将不受影响。为了避免数据库被重新打开
16、,在使用这个方法前,需要将所有的数据库连接都关闭。远程停止服务,需要能远程连接到这台服务器上。关闭服务器可以通过使用密码来保护(启动时也需要使用和创建的密码) ,命令行参数可以通过-tcpPassword 来实现。使用 HibernateH2数据库支持 Hibernate 3.1及以上的版本。 你能够使用 HSQLDB 方言,或是 H2自己的方言。注意的是,在 Hibernate 中包含的 H2方言有 BUG,针对这些 BUG 的补丁已经被发布。最新的 Hibernate 的方言版本是 src/tools/org/hibernate/dialect/H2Dialect.java.txt。你能够
17、将它改名为 H2Dialect.java,直接把它包含在你的应用中即可使用。使用 TopLink 和 Glassfish在 Glassfish 中使用 H2,设置 Datasource Classname 为 org.h2.jdbcx.JdbcDataSource。可以通过图形界面进行设置Application Server - Resources - JDBC - Connection Pools, 或者编辑文件 sun-resources.xml:修改元素 jdbc-connection-pool,设置属性 datasource-classname为 org.h2.jdbcx.JdbcDa
18、taSource。H2数据库是兼容 HSQLDB 和 PostgreSQL。如果要使用 H2的特殊属性,需要使用H2Platform,源代码在src/tools/oracle/toplink/essentials/platform/database/DatabasePlatform.java.txt. 你将这个文件拷贝到你的应用中,并将它改名为.java 的文件,并修改 persistence.xml:旧版本的 Glassfish 的属性名为 toplink.platform.class.name。使用 EclipseLink在 EclipseLink 使用 H2,可以通过类 org.ecli
19、pse.persistence.platform.database.H2Platform。如果你使用的 EclipseLink 版本不支持,可以使用 OraclePlatform 替代,具体看 H2Platform.在 WEB 应用中使用 H2数据库在 WEB 应用中使用数据库,可以有多种方式,这里有一些针对 Tomcat 和 JBoss 的例子。内嵌模式最简单(目前)的方法就是将数据库内嵌到应用中,这样就意味着应用启动的时候就打开了一个连接(好的办法是使用 Servlet 监听器,看下面的说明) 。数据库能被多个 session 和应用访问,他们跟应用运行在一个进程内,大部分的 Servle
20、t 容器只适用一个进程(如Tomcat) ,这些容器都是没有问题的(除非你使用集群) 。Tomcat 使用多线程和多类加载器。如果多个应用同时访问同一个数据库,你需要将数据库的 jar 文件放在 shared/lib 或是server/lib 目录。好的方案是 WEB 应用启动时打开数据库, WEB 应用停止时关闭数据库。如果是多个应用,只需要一个应用来处理启动和关闭。好的方案是一个 session 一个连接,或者是一个请求(action)一个连接,连接使用完后尽可能的关闭它,当然不关闭并不会引起可怕的后果。服务器模式服务器模式是差不多的,但是它可以运行在其他的进程中。使用 Servlet 监
21、听去启动和停止数据库增加 h2*.jar 文件到你的应用中,将下面的配置增加到你的 web.xml 中(在 filter 节下面的 context-param):org.h2.server.web.DbStarter关于具体访问数据库的细节,你可以看 DbStarter.java。在这个工具中缺省打开的内嵌数据库 URL 为 jdbc:h2:/test, 用户名 sa,密码 sa。如果你要去使用这个连接,你可以使用下面的访问方式:Connection conn = getServletContext().getAttribute(“connection“);DbStarter 也能够启动 TC
22、P 服务,但是缺省状态下是不允许的。可以通过修改 web.xml 下的参数 db.tcpServer 来启用。下面是完整的配置选项,这些选项需要放在 description 标签和 listener / filter 标签中间:db.urljdbc:h2:/testdb.usersadb.passwordsadb.tcpServer-tcpAllowOthers当 WEB 应用停止时,数据库连接将被自动关闭,如果还启动了 TCP 服务,TCP 服务也将被自动关闭。使用 H2控制 ServletH2控制台是一个包含在 WEB 服务中的独立的应用,但是它也能作为一个 servlet 使用。为了做到
23、这点,你需要将 h2*.jar 文件添加到你的应用中,在你的 web.xml 文件中增加下面的配置:H2Consoleorg.h2.server.web.WebServlet1H2Console/console/*关于更多的细节,请参考 src/tools/WEB-INF/web.xml.要创建一个合适的 H2控制台的 WEB 应用,运行下面的命令:build warConsoleCSV (逗号分隔文件)的支持CSV 文件在数据库系统中支持 CSVREAD 和 CSVWRITE 方法,也可以把它作为数据库之外的一个工具来使用。将数据库查询结果写成 CSV 文件通过内置的 CSVWRITE 方法
24、,可以将查询结果写成 CSV 格式的文件,如:CREATE TABLE TEST(ID INT, NAME VARCHAR);INSERT INTO TEST VALUES(1, Hello), (2, World);CALL CSVWRITE(test.csv, SELECT * FROM TEST);读 CSV 文件通过 CSVREAD 方法读取数据。如:SELECT * FROM CSVREAD(test.csv);在 JAVA 应用中写 CSV 文件在数据库之外也可以使用 CSV 工具,如:import java.sql.*;import org.h2.tools.Csv;import
25、 org.h2.tools.SimpleResultSet;public class TestCsv public static void main(String args) throws Exception SimpleResultSet rs = new SimpleResultSet();rs.addColumn(“NAME“, Types.VARCHAR, 255, 0);rs.addColumn(“EMAIL“, Types.VARCHAR, 255, 0);rs.addRow(“Bob Meier“, “bob.meierabcde.abc“);rs.addRow(“John Jo
26、nes“, “john.jonesabcde.abc“);Csv.getInstance().write(“data/test.csv“, rs, null);在 JAVA 应用中读 CSV 文件在数据库之外也能读 CSV 文件,如:import java.sql.*;import org.h2.tools.Csv;public class TestCsv public static void main(String args) throws Exception ResultSet rs = Csv.getInstance().read(“data/test.csv“, null, null)
27、;ResultSetMetaData meta = rs.getMetaData();while (rs.next() for (int i = 0; i meta.getColumnCount(); i+) System.out.println(meta.getColumnLabel(i + 1) + “: “ +rs.getString(i + 1);System.out.println();rs.close();升级,备份,和恢复数据库升级 Database Upgrade数据库升级的推荐方案是,老版本的数据库的数据备份成 SQL 脚本的方式,在新版本的数据库上执行这些 SQL 来恢复数
28、据。用脚本工具备份数据备份数据库有多种方式。如可以直接拷贝数据库文件,但是不建议在数据库在使用的时候去拷贝文件,另外数据库文件是二进制的,不能直接读懂,并且数据库文件可能会比较大,推荐的备份方式是创建压缩的 SQL 脚本文件,并且 H2提供了数据导出的脚本工具:java org.h2.tools.Script -url jdbc:h2:/test -user sa -script test.zip -options compression zip也可能通过 SQL 命令脚本去备份数据库,关于更多的命令选项,请查看 SQL 命令脚本。备份也能通过远程来做,但是文件被创建在服务器上,你可以通过 F
29、TP 服务获取备份的脚本文件。用脚本恢复数据从一个 SQL 脚本文件恢复数据库,你可以使用 RunScript 工具:java org.h2.tools.RunScript -url jdbc:h2:/test -user sa -script test.zip -options compression zip关于更多的命令的选项,请参考 SQL 命令 RUNSCRIPT。恢复也能通过远程来实现,但是恢复的文件需要在服务器上。可以通过 FTP 服务器上传恢复需要的脚本文件。也可以通过 RUNSCRIPT 执行 SQL 脚本, SQL 脚本文件内也可以引用另外的 SQL 脚本文件,在服务器模式下,也可以远程执行SQL 脚本,但是要求脚本文件和被引用的脚本未见都在服务器上。在线备份SQL 命令 BACKUP 和备份工具都能创建全库的备份文件的压缩包。但是,这个文件的内容并不可读,相比脚本方式,BACKUP 命令并不锁定数据库对象,也不阻塞用户,但是BACKUP 命令备份结果是事务一致的。:BACKUP TO backup.zip