H2Database中文教程

启动和使用H2管理系统
设置H2管理系统
通过JDBC连接到数据库
创建一个新的数据库
使用服务器模式
使用Hibernate
使用TopLinkGlassfish
使用EclipseLink
WEB应用中使用数据库
CSV (逗号分隔文件)的支持
升级,备份,和恢复
命令行工具
使用OpenOffice基础框架
使用/ JNLP启动JAVA WEB
使用连接池
全文检索
用户自定义变量
日期和时间
使用Spring

使用和启动H2管理系统

H2管理系统让你能够通过一个浏览器对H2SQL数据库进行管理操作。H2管理系统不仅可以连接H2数据库,也可以连接其他支持JDBC接口的数据库。



 





这是一个B/C/S应用,在服务器和浏览器上都要运行H2的管理程序。根据平台不同,H2管理系统支持多种启动应用的方式。



windows上有两种方式启动H2管理系统

方式一:单击[开始][程序][H2],和 [H2 Console (Command Line)]。当使用SUN JDK1.5时,一个标题为'H2 Console'的窗口将弹出。当使用SUN JDK1.6时,一个数据库图标将被加入WINDOWS到系统托盘。如果既无窗口弹出也没有图标加入到系统托盘,很可能是你的JDK没有正确安装(如果确认自己的JDK安装正确,可以尝试用另外一种方式启动控制台)。另外一个浏览器窗口将被打开,指向的URLhttp://localhost:8082,是H2管理系统的登录页面。

方式二:打开文件浏览器,切换目录到h2/bin,双击运行h2.bat。一个控制台窗口将弹出,如果有问题,将有错误信息在这个窗口里显示。一个浏览器窗口将被打开,指向的URLhttp://localhost:8082,是H2管理系统的登录页面。



其他操作系统启动H2管理系统

方式一:双击h2*.jar文件,如果.jar文件能正确的被java打开。

方式二:打开一个控制台窗口,切换目录到h2/bin,执行命令:java -cp h2*.jar org.h2.tools.Server

防火墙

在你启动服务时,如果你安装了防护墙,你可能会收到一个防护墙的安全警告。如果不需要其他计算机访问你这台计算机上的H2数据库,你可以让防火墙阻塞H2对外服务的端口,但是本地计算机仍可以访问这些端口。当你需要其他计算机也能访问这台计算机的H2数据库时,你需要让防火墙开放H2对外服务的端口。

有报告显示使用卡巴斯基7.0的防火墙时,使用IP地址访问本地的H2时,速度非常的缓慢,替代的方案是使用'localhost'代替IP地址来访问。

一个简单的防火墙已经集成到H2的服务器中,其他的计算机缺省状态下不能连接到服务器,如果需要其他计算机能连接到H2服务器,到'Preferences'(偏好),选择'Allow connections from other computers'(允许从其他计算连接)即可。

JAVA测试

打开一个命令行窗口,输入下面的命令,检测JAVA的版本:

java -version

 

如果你得到错误的信息,你可能未安装JDK,或是需要将JAVA的可执行文件路径加入到环境变量PATH中。

错误信息'Port may be in use'(端口被占用)

你可能在启动一个H2控制台实例时,出现错误信息"The Web server could not be started. Possible cause: another server is already running...".WEB服务器不能启动,可能的原因:另外一个服务器已经在运行了)。使用不同的端口,可以在一台计算机上启动多个控制台程序,但是一般都不被这么要求。

使用其他端口

如果端口已经被其他应用占用,你需要使用其他端口来启动H2控制台。改变H2的控制台端口需要修改配置文件.h2.server.properties。这个文件存储在用户目录下(Windows系统中,这个文件通常在Documents and Settings/<username>)。这个相应的入口实体是webPort.

使用浏览器连接到服务器

服务器启动成功后,你就可以使用WEB浏览器访问服务,浏览器需要支持JavaScript。在启动的服务器上启动浏览器,打开URL http://localhost:8082。在启动服务器之外的计算机上,你需要提供启动服务器的IP地址,如http://192.168.0.2:8082.如果你在服务器上启用了SSL URL需要使用https://开头.

多个并发会话

支持多个并发的浏览器会话。由于数据对象是存储在服务器上的,同时工作的会话数受限于服务器的内存。

登录

在登录页,你提交连接信息就可以登录到数据库。设置JDBC作为连接数据库的驱动,填入JDBC URL、用户名、密码,单击[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 * FROM TEST T WHERE T,对象树上的表TEST将自动的展开。

 

断开连接和停止应用

断开数据库,点击工具栏上的Disconnect即可,这个时候,数据库服务仍在继续运行,等待着一个新的会话进行连接。

停止服务需要右键点击系统托盘的H2图标,选择 [Exit]。如果没有系统托盘的H2图标,切换到[Preferences]单击[Shutdown],在WINDOWS上在服务器启动的窗口下按[Ctrl]+[C],或者直接关闭WINDOWS上的控制台窗口。

设置H2控制台

H2控制台的设置信息存储在配置文件.h2.server.properties,该文件存放在你的用户目录下。在WINDOWS上,用户目录通常是C:\Documents and Settings\[username]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 application code here

        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 -cp h2*.jar org.h2.tools.Server

 

通过下面的命令行,可以查看服务器启动命令行的参数及缺省值:

java -cp h2*.jar org.h2.tools.Server -?

 

参数允许服务器工具启动到其他端口或者只是部分启动。

连接到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 Server

Server server = Server.createTcpServer(args).start();

...

// stop the TCP Server

server.stop();

 

外部程序停止TCP服务

TCP服务能被另外的进程停止,通过命令行停止TCP服务的命令如下:

java org.h2.tools.Server -tcpShutdown tcp://localhost:9092

 

通过在程序中添加下面的代码,也可以在另外的进程中停止TCP服务:

org.h2.tools.Server.shutdownTcpServer("tcp://localhost:9094");

 

这个方法仅能停止TCP服务,如果进程内的其他服务还在运行,他们将不受影响。为了避免数据库被重新打开,在使用这个方法前,需要将所有的数据库连接都关闭。远程停止服务,需要能远程连接到这台服务器上。关闭服务器可以通过使用密码来保护(启动时也需要使用和创建的密码),命令行参数可以通过-tcpPassword来实现。

使用Hibernate

H2数据库支持Hibernate 3.1及以上的版本。你能够使用HSQLDB方言,或是H2自己的方言。注意的是,在 Hibernate 中包含的H2方言有BUG,针对这些BUG补丁已经被发布。最新的Hibernate 的方言版本是src/tools/org/hibernate/dialect/H2Dialect.java.txt。你能够将它改名为H2Dialect.java,直接把它包含在你的应用中即可使用。

使用TopLinkGlassfish

Glassfish中使用H2,设置Datasource Classnameorg.h2.jdbcx.JdbcDataSource。可以通过图形界面进行设置[Application Server] - [Resources] - [JDBC] - [Connection Pools], 或者编辑文件sun-resources.xml:修改元素jdbc-connection-pool,设置属性 datasource-classname org.h2.jdbcx.JdbcDataSource

H2数据库是兼容HSQLDBPostgreSQL。如果要使用H2的特殊属性,需要使用H2Platform,源代码在src/tools/oracle/toplink/essentials/platform/database/DatabasePlatform.java.txt. 你将这个文件拷贝到你的应用中,并将它改名为.java的文件,并修改persistence.xml

<property

    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应用中使用数据库,可以有多种方式,这里有一些针对TomcatJBoss的例子。

内嵌模式

最简单(目前)的方法就是将数据库内嵌到应用中,这样就意味着应用启动的时候就打开了一个连接(好的办法是使用Servlet监听器,看下面的说明)。数据库能被多个session和应用访问,他们跟应用运行在一个进程内,大部分的Servlet容器只适用一个进程(如Tomcat),这些容器都是没有问题的(除非你使用集群)。Tomcat使用多线程和多类加载器。如果多个应用同时访问同一个数据库,你需要将数据库的jar文件放在shared/lib或是server/lib目录。好的方案是WEB应用启动时打开数据库,WEB应用停止时关闭数据库。如果是多个应用,只需要一个应用来处理启动和关闭。好的方案是一个session一个连接,或者是一个请求(action)一个连接,连接使用完后尽可能的关闭它,当然不关闭并不会引起可怕的后果。

服务器模式

服务器模式是差不多的,但是它可以运行在其他的进程中。

使用Servlet监听去启动和停止数据库

增加h2*.jar文件到你的应用中,将下面的配置增加到你的web.xml中(在filter节下面的 context-param):

<listener>

    <listener-class>org.h2.server.web.DbStarter</listener-class>

</listener>

 

关于具体访问数据库的细节,你可以看DbStarter.java。在这个工具中缺省打开的内嵌数据库URLjdbc:h2:~/test用户名sa,密码sa。如果你要去使用这个连接,你可以使用下面的访问方式:

Connection conn = getServletContext().getAttribute("connection");

 

DbStarter 也能够启动TCP服务,但是缺省状态下是不允许的。可以通过修改web.xml下的参数db.tcpServer来启用。下面是完整的配置选项,这些选项需要放在description标签和 listener / filter标签中间:

<context-param>

    <param-name>db.url</param-name>

    <param-value>jdbc:h2:~/test</param-value>

</context-param>

<context-param>

    <param-name>db.user</param-name>

    <param-value>sa</param-value>

</context-param>

<context-param>

    <param-name>db.password</param-name>

    <param-value>sa</param-value>

</context-param>

<context-param>

    <param-name>db.tcpServer</param-name>

    <param-value>-tcpAllowOthers</param-value>

</context-param>

 

WEB应用停止时,数据库连接将被自动关闭,如果还启动了TCP服务,TCP服务也将被自动关闭。

使用H2控制Servlet

H2控制台是一个包含在WEB服务中的独立的应用,但是它也能作为一个servlet使用。为了做到这点,你需要将h2*.jar文件添加到你的应用中,在你的web.xml文件中增加下面的配置:

<servlet>

    <servlet-name>H2Console</servlet-name>

    <servlet-class>org.h2.server.web.WebServlet</servlet-class>

    <load-on-startup>1</load-on-startup>

</servlet>

<servlet-mapping>

    <servlet-name>H2Console</servlet-name>

    <url-pattern>/console/*</url-pattern>

</servlet-mapping>

 

关于更多的细节,请参考src/tools/WEB-INF/web.xml.

要创建一个合适的H2控制台的WEB应用,运行下面的命令:

build warConsole

 

CSV (逗号分隔文件)的支持

CSV文件在数据库系统中支持CSVREADCSVWRITE方法,也可以把它作为数据库之外的一个工具来使用。

将数据库查询结果写成CSV文件

通过内置的CSVWRITE方法,可以将查询结果写成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 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", "[email protected]");

        rs.addRow("John Jones", "[email protected]");

        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);

        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来恢复数据。

用脚本工具备份数据

备份数据库有多种方式。如可以直接拷贝数据库文件,但是不建议在数据库在使用的时候去拷贝文件,另外数据库文件是二进制的,不能直接读懂,并且数据库文件可能会比较大,推荐的备份方式是创建压缩的SQL脚本文件,并且H2提供了数据导出的脚本工具:

java org.h2.tools.Script -url jdbc:h2:~/test -user sa -script test.zip -options compression zip

 

也可能通过SQL命令脚本去备份数据库,关于更多的命令选项,请查看SQL命令脚本。备份也能通过远程来做,但是文件被创建在服务器上,你可以通过FTP服务获取备份的脚本文件。

用脚本恢复数据

从一个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'

 

备份工具 (org.h2.tools.Backup)不能创建在线备份;程序在执行的时候,数据库不能使用。

并不支持数据库运行的同时创建数据库备份,除非是文件系统支持创建快照,但是快照不能保证数据拷贝顺序的正确性。

命令行工具

H2数据库提供了一组命令行工具,如果你需要了解这些工具,使用参数-?,如:

java -cp h2*.jar org.h2.tools.Backup -?

 

命令行工具有:

·         Backup创建数据库备份

·         ChangeFileEncryption 允许改变文件加密密码和数据库的加密算法

·         Console 启动基于浏览器的H2控制台

·         ConvertTraceFile转换 .trace.db 文件到JAVA应用和SQL脚本

·         CreateCluster从一个独立的数据库服务创建集群

·         DeleteDbFiles 删除所有的数据库文件

·         Recover恢复损坏的数据库

·         Restore从数据库备份中恢复数据库

·         RunScript 运行数据库SQL脚本

·         Script 为数据库备份或迁移导出SQL脚本

·         Server 启动H2服务模式

·         Shell命令行工具

这些工具也能在程序中通过调用相应的方法来使用,相关详细的调用说明,请参考JavaDoc文档。

使用OpenOffice基础框架

OpenOffice.org基础框架支持通过JDBC连接数据库。你也可以通过OpenOffice框架连接到H2数据库。首先将JDBC驱动增加到OpenOffice中,下面的步骤可以连接到H2数据库:

·         启动OpenOffice Writer,进入[Tools], [Options]

·         确认你在OpenOffice.org / Java中选择了JAVA运行环境

·         单击 [Class Path...], [Add Archive...]

·         选择你的h2jar文件(本机上的路径可以由你选择)

·         单击 [OK] (按要求的点击), 停止OpenOffice (包括Quickstarter)

·         启动OpenOffice框架

·         连接到一个存在的数据库;选择 [JDBC]; [Next]

·         输入数据库URL,如: jdbc:h2:~/test

·         输入JDBC驱动类: org.h2.Driver

你可以访问存于用户当前目录的数据库。使用H2数据通过NeoOffice (去掉X11OpenOffice)

·         NeoOffice,到[NeoOffice] [Preferences]

·         [NeoOffice]页下找到[Java]

·         单击[Class Path], [Add Archive...]

·         选择h2jar文件(本地目录,任你选择合适的目录)

·         单击[OK](根据需要),重启NeoOffice.

现在,你可以通过"Database Wizard"创建一新的数据库:

·         单击[File], [New], [Database].

·         选择[Connect to existing database],并且选择[JDBC],单击next.

·         输入数据源的URL,例如:jdbc:h2:~/test

·         JDBC驱动类: org.h2.Driver

其他的在NeoOffice中使用H2的方法:

·         H2jar包打包到一个扩展包中

·         NeoOffice中作为扩展JAVA包进行安装

这个能通过使用NetBeans OpenOffice插件来创建。详细看Extensions Development.

使用/ JNLP启动Java Web应用

当使用/ JNLP JAVA网络加载协议)启动JAVA WEB,允许访问标签必须被设置在.jnlp文件,并且.jar的应用文件必须被签名,否则,当你试着去写文件系统,下面的异常将会被抛出:java.security.AccessControlException: access denied (java.io.FilePermission ... read). 如访问标签:

<security>

    <all-permissions/>

</security>

 

使用连接池

如果H2的数据库已经打开,打开一个连接很快。如果要打开和关闭许多连接,使用连接池,可以提升性能。H2包含了一个简单的连接池,它是基于Christian d'HeureuseMini Connection Pool Manager。还有其他更复杂的开源连接池可以使用,如Apache Commons DBCPH2从内置连接池获取连接比使用DriverManager.getConnection()性能提升两倍左右。内置的连接池使用方法如下:

import java.sql.*;

import org.h2.jdbcx.JdbcConnectionPool;

public class Test {

    public static void main(String[] args) throws Exception {

        JdbcConnectionPool cp = JdbcConnectionPool.create(

            "jdbc:h2:~/test", "sa", "sa");

        for (int i = 0; i < args.length; i++) {

            Connection conn = cp.getConnection();

            conn.createStatement().execute(args[i]);

            conn.close();

        }

        cp.dispose();

    }

}

 

全文检索

H2包含了两种全文检索的实现。一种通过使用Apache Lucene来实现,另一种是通过存储索引文件到数据库里的一张特殊表来实现的(私有实现)。

使用私有全文检索

通过下面的调用来实现初始化:

CREATE ALIAS IF NOT EXISTS FT_INIT FOR "org.h2.fulltext.FullText.init";

CALL FT_INIT();

 

如果你要用到私有全文检索,你需要在每个数据库里都初始化它。然后你能创建一张表用于全文检索的索引,如:

CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR);

INSERT INTO TEST VALUES(1, 'Hello World');

CALL FT_CREATE_INDEX('PUBLIC', 'TEST', NULL);

 

PUBLICschema的名字, TEST是索引表名。字段名列表是可选的,在上面的例子中,所有的字段都被索引,索引的更新是实时的,使用下面的查询语句可以进行搜索:

SELECT * FROM FT_SEARCH('Hello', 0, 0);

 

下面的语句将得到一个指定内容的搜索结果集。

QUERY: "PUBLIC"."TEST" WHERE "ID"=1

 

要得到原始的数据,需要使用 FT_SEARCH_DATA('Hello', 0, 0)。结果包含字段SCHEMA (schema), TABLE (表名), COLUMNS (字段名数组), KEYS (对象数组)。可以和表做连接,使用连接如下:SELECT T.* FROM FT_SEARCH_DATA('Hello', 0, 0) FT, TEST T WHERE FT.TABLE='TEST' AND T.ID=FT.KEYS[0];

你也能在JAVA应用中使用索引:

org.h2.fulltext.FullText.search(conn, text, limit, offset);

org.h2.fulltext.FullText.searchData(conn, text, limit, offset);

 

Lucene实现的全文检索

使用Lucene实现的全文检索,你需要将Lucene加入到 classpath中,并且处理相关的依赖,如果你使用H2控制台,你能增加Lucenejar文件到环境变量H2DRIVERSCLASSPATH中。通过下面的语句初始化Lucene全文检索:

CREATE ALIAS IF NOT EXISTS FTL_INIT FOR "org.h2.fulltext.FullTextLucene.init";

CALL FTL_INIT();

 

如果你需要是使用Lucene全文检索,你每个数据库都需要初始化。你也能通过下面的语句创建全文索引表:

CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR);

INSERT INTO TEST VALUES(1, 'Hello World');

CALL FTL_CREATE_INDEX('PUBLIC', 'TEST', NULL);

 

PUBLICschema, TEST是表名. 字段名列表是可选的,在上面的例子中,所有的字段都被索引,索引的更新是实时的,使用下面的查询语句可以进行搜索:

SELECT * FROM FTL_SEARCH('Hello', 0, 0);

 

下面的语句将得到一个指定内容的搜索结果集:

QUERY: "PUBLIC"."TEST" WHERE "ID"=1

要得到原始的数据,需要使用FTL_SEARCH_DATA('Hello', 0, 0);.结果包含字段SCHEMA (schema), TABLE (表名), COLUMNS (字段名数组), KEYS (对象数组)。可以和表做连接,使用连接如下SELECT T.* FROM FTL_SEARCH_DATA('Hello', 0, 0) FT, TEST T WHERE FT.TABLE='TEST' AND T.ID=FT.KEYS[0];

你也能在JAVA应用中使用索引:

org.h2.fulltext.FullTextLucene.search(conn, text, limit, offset);

org.h2.fulltext.FullTextLucene.searchData(conn, text, limit, offset);

 

用户定义变量

数据库支持用户自定义变量,自定义变量使用@开头,能够被用于任何表达式和参数中。变量是不能持久的,作为范围为session,这就意味着变量只在定义它的那个session里是有效的。一个变量通常使用SET命令来声明:

SET @USER = 'Joe';

 

变量也可以通过使用SET()方法来改变值。在查询中可以直接使用:

SET @TOTAL = NULL;

SELECT X, SET(@TOTAL, IFNULL(@TOTAL, 1.) * X) F FROM SYSTEM_RANGE(1, 50);

 

变量不能被设置为NULL值,变量的类型是变量自动分配的,也就是说,在变量使用前变量的定义并不是必须(也不是必需)的,在声明变量时没有限制,大对象(LOB)也被支持。

日期和时间

日期、时间、时间戳的值支持ISO 8601格式,格式还包含了时区:

CALL TIMESTAMP '2008-01-01 12:00:00+01:00';

 

如果未设置时区,将使用系统中当前的时区。存储在H2数据库文件中的日期和时间是使用GMT(格林威治时间)。如果数据库被另一个时区的系统打开,日期和时间将根据时区进行换算。如果你希望移动数据从一个时区的系统到另一个时区的系统,并且不希望发生时区换算,你需要使用脚本命令或工具将数据导出为SQL脚本文件,再使用RUNSCRIPT在新时区的系统中导入数据。

使用Spring

通过下面的配置在Spring框架中启动和停止H2TCP服务:

<bean id = "org.h2.tools.Server"

            class="org.h2.tools.Server"

            factory-method="createTcpServer"

            init-method="start"

            destroy-method="stop">

    <constructor-arg value="-tcp,-tcpAllowOthers,true,-tcpPort,8043" />

</bean>

 

destroy-method方法能防止热振动和重启异常。

你可能感兴趣的:(database)