H2Database中文教程.docx
- 文档编号:12245423
- 上传时间:2023-04-17
- 格式:DOCX
- 页数:19
- 大小:69.05KB
H2Database中文教程.docx
《H2Database中文教程.docx》由会员分享,可在线阅读,更多相关《H2Database中文教程.docx(19页珍藏版)》请在冰豆网上搜索。
H2Database中文教程
启动和使用H2管理系统
设置H2管理系统
通过JDBC连接到数据库
创建一个新的数据库
使用服务器模式
使用Hibernate
使用TopLink和Glassfish
使用EclipseLink
在WEB应用中使用数据库
CSV(逗号分隔文件)的支持
升级,备份,和恢复
命令行工具
使用OpenOffice基础框架
使用/JNLP启动JAVAWEB
使用连接池
全文检索
用户自定义变量
日期和时间
使用Spring
使用和启动H2管理系统
H2管理系统让你能够通过一个浏览器对H2的SQL数据库进行管理操作。
H2管理系统不仅可以连接H2数据库,也可以连接其他支持JDBC接口的数据库。
这是一个B/C/S应用,在服务器和浏览器上都要运行H2的管理程序。
根据平台不同,H2管理系统支持多种启动应用的方式。
在windows上有两种方式启动H2管理系统
方式一:
单击[开始],[程序],[H2],和[H2Console(CommandLine)]。
当使用SUNJDK1.5时,一个标题为'H2Console'的窗口将弹出。
当使用SUNJDK1.6时,一个数据库图标将被加入WINDOWS到系统托盘。
如果既无窗口弹出也没有图标加入到系统托盘,很可能是你的JDK没有正确安装(如果确认自己的JDK安装正确,可以尝试用另外一种方式启动控制台)。
另外一个浏览器窗口将被打开,指向的URL是http:
//localhost:
8082,是H2管理系统的登录页面。
方式二:
打开文件浏览器,切换目录到h2/bin,双击运行h2.bat。
一个控制台窗口将弹出,如果有问题,将有错误信息在这个窗口里显示。
一个浏览器窗口将被打开,指向的URL是http:
//localhost:
8082,是H2管理系统的登录页面。
其他操作系统启动H2管理系统
方式一:
双击h2*.jar文件,如果.jar文件能正确的被java打开。
方式二:
打开一个控制台窗口,切换目录到h2/bin,执行命令:
java-cph2*.jarorg.h2.tools.Server
防火墙
在你启动服务时,如果你安装了防护墙,你可能会收到一个防护墙的安全警告。
如果不需要其他计算机访问你这台计算机上的H2数据库,你可以让防火墙阻塞H2对外服务的端口,但是本地计算机仍可以访问这些端口。
当你需要其他计算机也能访问这台计算机的H2数据库时,你需要让防火墙开放H2对外服务的端口。
有报告显示使用卡巴斯基7.0的防火墙时,使用IP地址访问本地的H2时,速度非常的缓慢,替代的方案是使用'localhost'代替IP地址来访问。
一个简单的防火墙已经集成到H2的服务器中,其他的计算机缺省状态下不能连接到服务器,如果需要其他计算机能连接到H2服务器,到'Preferences'(偏好),选择'Allowconnectionsfromothercomputers'(允许从其他计算连接)即可。
JAVA测试
打开一个命令行窗口,输入下面的命令,检测JAVA的版本:
java-version
如果你得到错误的信息,你可能未安装JDK,或是需要将JAVA的可执行文件路径加入到环境变量PATH中。
错误信息'Portmaybeinuse'(端口被占用)
你可能在启动一个H2控制台实例时,出现错误信息"TheWebservercouldnotbestarted.Possiblecause:
anotherserverisalreadyrunning...".(WEB服务器不能启动,可能的原因:
另外一个服务器已经在运行了)。
使用不同的端口,可以在一台计算机上启动多个控制台程序,但是一般都不被这么要求。
使用其他端口
如果端口已经被其他应用占用,你需要使用其他端口来启动H2控制台。
改变H2的控制台端口需要修改配置文件.h2.server.properties。
这个文件存储在用户目录下(在Windows系统中,这个文件通常在DocumentsandSettings/
这个相应的入口实体是webPort.
使用浏览器连接到服务器
服务器启动成功后,你就可以使用WEB浏览器访问服务,浏览器需要支持JavaScript。
在启动的服务器上启动浏览器,打开URLhttp:
//localhost:
8082。
在启动服务器之外的计算机上,你需要提供启动服务器的IP地址,如http:
//192.168.0.2:
8082.如果你在服务器上启用了SSL,URL需要使用https:
//开头.
多个并发会话
支持多个并发的浏览器会话。
由于数据对象是存储在服务器上的,同时工作的会话数受限于服务器的内存。
登录
在登录页,你提交连接信息就可以登录到数据库。
设置JDBC作为连接数据库的驱动,填入JDBCURL、用户名、密码,单击[Connect]。
你能保存和恢复以前设置的信息,这些设置都存储在属性文件中。
错误信息
错误信息用红色标识,你能通过单击消息显示或隐藏异常的堆栈信息。
附加数据库驱动
通过增加JAR的本地驱动文件到环境变量来附加数据库驱动。
环境变量包括H2DRIVERS和CLASSPATH,以WINDOWS为例:
如要增加数据库驱动“C:
\Programs\hsqldb\lib\hsqldb.jar”,设置环境变量H2DRIVERS=C:
\Programs\hsqldb\lib\hsqldb.jar。
多个驱动可以被设置,每个驱动之间通过;分号分隔(WINDOWS),其他系统通过:
冒号分隔。
在路径中空格被支持,但是这些设置不能被引用。
使用H2控制台
H2控制台主页面分为三个主要的部分:
顶部的工具栏,左边的是对象树,右边的是查询和结果输出栏。
数据库对象(如表)都被列在左边的树形上。
在查询栏上输入SQL语句点击'Run‘,结果就被输出到命令行的下面。
增加表名和字段名
可以通过在树上点击增加表名和字段名。
如果单击表,当这个查询栏是空的时候,”SELECT*FROM"将被自动增加到查询栏。
当输入一个表的查询时,对象树上将自动的展开这张表。
例如,你输入SELECT*FROMTESTTWHERET,对象树上的表TEST将自动的展开。
断开连接和停止应用
断开数据库,点击工具栏上的Disconnect即可,这个时候,数据库服务仍在继续运行,等待着一个新的会话进行连接。
停止服务需要右键点击系统托盘的H2图标,选择[Exit]。
如果没有系统托盘的H2图标,切换到[Preferences]单击[Shutdown],在WINDOWS上在服务器启动的窗口下按[Ctrl]+[C],或者直接关闭WINDOWS上的控制台窗口。
设置H2控制台
H2控制台的设置信息存储在配置文件.h2.server.properties,该文件存放在你的用户目录下。
在WINDOWS上,用户目录通常是C:
\DocumentsandSettings\[username]。
H2控制台第一次启动时将自动创建应用所需要包含的配置文件。
使用JDBC连接到数据库
JAVA应用要连接到数据库,首先需要加载数据库驱动,然后获得一个数据库连接,下面是一个简单的例子:
importjava.sql.*;
publicclassTest{
publicstaticvoidmain(String[]a)
throwsException{
Class.forName("org.h2.Driver");
Connectionconn=DriverManager.
getConnection("jdbc:
h2:
~/test","sa","");
//addapplicationcodehere
conn.close();
}
}
代码中通过Class.forName(...)来加载驱动,通过DriverManager.getConnection()来打开一个连接,驱动名为"org.h2.Driver"。
数据库URL总是使用jdbc:
h2:
来标识,getConnection()的第二个参数是用户名(sa作为系统超级管理员的一个例子),第三个参数是密码,用户名是不区分大小写,但是密码是大小写区分的。
创建新一个新数据库
缺省情况下,如果URL指定的数据库并不存在,一个新的空的数据库将被自动的创建。
创建数据库的用户自动成为这个数据库的超级管理员。
自动创建新库也可以通过特殊的URL进行屏蔽,参见打开一个存在的数据库。
使用服务器模式
H2目前支持三种服务器模式:
WEB服务器模式(H2控制台)、TCP服务器模式(C/S连接)和PG服务器模式(PostgreSQL客户端)。
可以通过多种方式启动服务器模式,通常的方式是通过服务器工具。
通过命令行启动服务器工具
缺省设置下,输入下面命令并执行能启动服务器工具:
java-cph2*.jarorg.h2.tools.Server
通过下面的命令行,可以查看服务器启动命令行的参数及缺省值:
java-cph2*.jarorg.h2.tools.Server-?
参数允许服务器工具启动到其他端口或者只是部分启动。
连接到TCP服务器
要连接另一台计算机的的数据库,只能通过TCP方式进行连接,使用下面的连接驱动和数据库URL:
∙JDBC驱动类:
org.h2.Driver
∙数据库URL:
jdbc:
h2:
tcp:
//ip/~/test
关于数据库URL,看数据库URL说明。
在应用内部启动TCP服务
在JAVA应用内部,也可以通过代码来实现TCP服务的启动和停止,例子代码如下:
importorg.h2.tools.Server;
...
//starttheTCPServer
Serverserver=Server.createTcpServer(args).start();
...
//stoptheTCPServer
server.stop();
外部程序停止TCP服务
TCP服务能被另外的进程停止,通过命令行停止TCP服务的命令如下:
javaorg.h2.tools.Server-tcpShutdowntcp:
//localhost:
9092
通过在程序中添加下面的代码,也可以在另外的进程中停止TCP服务:
org.h2.tools.Server.shutdownTcpServer("tcp:
//localhost:
9094");
这个方法仅能停止TCP服务,如果进程内的其他服务还在运行,他们将不受影响。
为了避免数据库被重新打开,在使用这个方法前,需要将所有的数据库连接都关闭。
远程停止服务,需要能远程连接到这台服务器上。
关闭服务器可以通过使用密码来保护(启动时也需要使用和创建的密码),命令行参数可以通过-tcpPassword来实现。
使用Hibernate
H2数据库支持Hibernate3.1及以上的版本。
你能够使用HSQLDB方言,或是H2自己的方言。
注意的是,在Hibernate中包含的H2方言有BUG,针对这些BUG的补丁已经被发布。
最新的Hibernate的方言版本是src/tools/org/hibernate/dialect/H2Dialect.java.txt。
你能够将它改名为H2Dialect.java,直接把它包含在你的应用中即可使用。
使用TopLink和Glassfish
在Glassfish中使用H2,设置DatasourceClassname为org.h2.jdbcx.JdbcDataSource。
可以通过图形界面进行设置[ApplicationServer]-[Resources]-[JDBC]-[ConnectionPools],或者编辑文件sun-resources.xml:
修改元素jdbc-connection-pool,设置属性datasource-classname为org.h2.jdbcx.JdbcDataSource。
H2数据库是兼容HSQLDB和PostgreSQL。
如果要使用H2的特殊属性,需要使用H2Platform,源代码在src/tools/oracle/toplink/essentials/platform/database/DatabasePlatform.java.txt.你将这个文件拷贝到你的应用中,并将它改名为.java的文件,并修改persistence.xml:
name="toplink.target-database" value="oracle.toplink.essentials.platform.database.H2Platform"/> 旧版本的Glassfish的属性名为toplink.platform.class.name。 使用EclipseLink 在EclipseLink使用H2,可以通过类org.eclipse.persistence.platform.database.H2Platform。 如果你使用的EclipseLink版本不支持,可以使用OraclePlatform替代,具体看H2Platform. 在WEB应用中使用H2数据库 在WEB应用中使用数据库,可以有多种方式,这里有一些针对Tomcat和JBoss的例子。 内嵌模式 最简单(目前)的方法就是将数据库内嵌到应用中,这样就意味着应用启动的时候就打开了一个连接(好的办法是使用Servlet监听器,看下面的说明)。 数据库能被多个session和应用访问,他们跟应用运行在一个进程内,大部分的Servlet容器只适用一个进程(如Tomcat),这些容器都是没有问题的(除非你使用集群)。 Tomcat使用多线程和多类加载器。 如果多个应用同时访问同一个数据库,你需要将数据库的jar文件放在shared/lib或是server/lib目录。 好的方案是WEB应用启动时打开数据库,WEB应用停止时关闭数据库。 如果是多个应用,只需要一个应用来处理启动和关闭。 好的方案是一个session一个连接,或者是一个请求(action)一个连接,连接使用完后尽可能的关闭它,当然不关闭并不会引起可怕的后果。 服务器模式 服务器模式是差不多的,但是它可以运行在其他的进程中。 使用Servlet监听去启动和停止数据库 增加h2*.jar文件到你的应用中,将下面的配置增加到你的web.xml中(在filter节下面的context-param): 关于具体访问数据库的细节,你可以看DbStarter.java。 在这个工具中缺省打开的内嵌数据库URL为jdbc: h2: ~/test,用户名sa,密码sa。 如果你要去使用这个连接,你可以使用下面的访问方式: Connectionconn=getServletContext().getAttribute("connection"); DbStarter也能够启动TCP服务,但是缺省状态下是不允许的。 可以通过修改web.xml下的参数db.tcpServer来启用。 下面是完整的配置选项,这些选项需要放在description标签和listener/filter标签中间: h2: ~/test 当WEB应用停止时,数据库连接将被自动关闭,如果还启动了TCP服务,TCP服务也将被自动关闭。 使用H2控制Servlet H2控制台是一个包含在WEB服务中的独立的应用,但是它也能作为一个servlet使用。 为了做到这点,你需要将h2*.jar文件添加到你的应用中,在你的web.xml文件中增加下面的配置: 关于更多的细节,请参考src/tools/WEB-INF/web.xml. 要创建一个合适的H2控制台的WEB应用,运行下面的命令: buildwarConsole CSV(逗号分隔文件)的支持 CSV文件在数据库系统中支持CSVREAD和CSVWRITE方法,也可以把它作为数据库之外的一个工具来使用。 将数据库查询结果写成CSV文件 通过内置的CSVWRITE方法,可以将查询结果写成CSV格式的文件,如: CREATETABLETEST(IDINT,NAMEVARCHAR); INSERTINTOTESTVALUES(1,'Hello'),(2,'World'); CALLCSVWRITE('test.csv','SELECT*FROMTEST'); 读CSV文件 通过CSVREAD方法读取数据。 如: SELECT*FROMCSVREAD('test.csv'); 在JAVA应用中写CSV文件 在数据库之外也可以使用CSV工具,如: importjava.sql.*; importorg.h2.tools.Csv; importorg.h2.tools.SimpleResultSet; publicclassTestCsv{ publicstaticvoidmain(String[]args)throwsException{ SimpleResultSetrs=newSimpleResultSet(); rs.addColumn("NAME",Types.VARCHAR,255,0); rs.addColumn("EMAIL",Types.VARCHAR,255,0); rs.addRow("BobMeier","bob.meier@abcde.abc"); rs.addRow("JohnJones","john.jones@abcde.abc"); Csv.getInstance().write("data/test.csv",rs,null); } } 在JAVA应用中读CSV文件 在数据库之外也能读CSV文件,如: importjava.sql.*; importorg.h2.tools.Csv; publicclassTestCsv{ publicstaticvoidmain(String[]args)throwsException{ ResultSetrs=Csv.getInstance(). read("data/test.csv",null,null); ResultSetMetaDatameta=rs.getMetaData(); while(rs.next()){ for(inti=0;i System.out.println( meta.getColumnLabel(i+1)+": "+ rs.getString(i+1)); } System.out.println(); } rs.close(); } } 升级,备份,和恢复 数据库升级DatabaseUpgrade 数据库升级的推荐方案是,老版本的数据库的数据备份成SQL脚本的方式,在新版本的数据库上执行这些SQL来恢复数据。 用脚本工具备份数据 备份数据库有多种方式。 如可以直接拷贝数据库文件,但是不建议在数据库在使用的时候去拷贝文件,另外数据库文件是二进制的,不能直接读懂,并且数据库文件可能会比较大,推荐的备份方式是创建压缩的SQL脚本文件,并且H2提供了数据导出的脚本工具: javaorg.h2.tools.Script-urljdbc: h2: ~/test-usersa-scripttest.zip-optionscompressionzip 也可能通过SQL命令脚本去备份数据库,关于更多的命令选项,请查看SQL命令脚本。 备份也能通过远程来做,但是文件被创建在服务器上,你可以通过FTP服务获取备份的脚本文件。 用脚本恢复数据 从一个SQL脚本文件恢复数据库,你可以使用RunScript工具: javaorg.h2.tools.RunScript-urljdbc: h2: ~/test-usersa-scripttest.zip-optionscompressionzip 关于更多的命令的选项,请参考SQL命令RUNSCRIPT。 恢复也能通过远程来实现,但是恢复的文件需要在服务器上。 可以通过FTP服务器上传恢复需要的脚本文件。 也可以通过RUNSCRIPT执行SQL脚本,SQL脚本文件内也可以引用另外的SQL脚本文件,在服务器模式下,也可以远程执行SQL脚本,但是要求脚本文件和被引用的脚本未见都在服务器上。 在线备份 SQL命令BACKUP和备份工具都能创建全库的备份文件的压缩包。 但是,这个文件的内容并不可读,相比脚本方式,BACKUP命令并不锁定数据库对象,也不阻塞用户,但是BACKUP命令备份结果是事务一致的。 : BACKUPTO'backup.zip' 备份工具(org.h2.tools.Backup)不能创建在线备份;程序在执行的时候,数据库不能使用。 并不支持数据库运行的同时创建数据库备份,除非是文件系统支持创建快照,但是快照不能保证数据拷贝顺序的正确性。 命令行工具 H2数据库提供了一组命令行工具,如果你需要了解这些工具,使用参数-? ,如: java-cph2*.jarorg.h2.tools.Backup-? 命令行工具有: ∙Backup创建数据库备份 ∙ChangeFileEnc
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- H2Database 中文 教程