启动和使用H2管理系统
设置H2管理系统
通过JDBC连接到数据库
创建一个新的数据库
使用服务器模式
使用Hibernate
使用TopLink和Glassfish
使用EclipseLink
在WEB应用中使用数据库
CSV (逗号分隔文件)的支持
升级,备份,和恢复
命令行工具
使用OpenOffice基础框架
使用/ JNLP启动JAVA WEB
使用连接池
全文检索
用户自定义变量
日期和时间
使用Spring
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到系统托盘。如果既无窗口弹出也没有图标加入到系统托盘,很可能是你的JDK没有正确安装(如果确认自己的JDK安装正确,可以尝试用另外一种方式启动控制台)。另外一个浏览器窗口将被打开,指向的URL是http://localhost:8082,是H2管理系统的登录页面。
方式二:打开文件浏览器,切换目录到h2/bin,双击运行h2.bat。一个控制台窗口将弹出,如果有问题,将有错误信息在这个窗口里显示。一个浏览器窗口将被打开,指向的URL是http://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控制台主页面分为三个主要的部分:顶部的工具栏,左边的是对象树,右边的是查询和结果输出栏。数据库对象(如表)都被列在左边的树形上。在查询栏上输入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控制台第一次启动时将自动创建应用所需要包含的配置文件。
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来实现。
H2数据库支持Hibernate 3.1及以上的版本。你能够使用HSQLDB方言,或是H2自己的方言。注意的是,在 Hibernate 中包含的H2方言有BUG,针对这些BUG的补丁已经被发布。最新的Hibernate 的方言版本是src/tools/org/hibernate/dialect/H2Dialect.java.txt。你能够将它改名为H2Dialect.java,直接把它包含在你的应用中即可使用。
在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.JdbcDataSource。
H2数据库是兼容HSQLDB和PostgreSQL。如果要使用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使用H2,可以通过类org.eclipse.persistence.platform.database.H2Platform。如果你使用的EclipseLink版本不支持,可以使用OraclePlatform替代,具体看H2Platform.
在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):
<listener>
<listener-class>org.h2.server.web.DbStarter</listener-class>
</listener>
关于具体访问数据库的细节,你可以看DbStarter.java。在这个工具中缺省打开的内嵌数据库URL为jdbc: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文件在数据库系统中支持CSVREAD和CSVWRITE方法,也可以把它作为数据库之外的一个工具来使用。
将数据库查询结果写成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", "bob.meier@abcde.abc");
rs.addRow("John Jones", "john.jones@abcde.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);
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.org基础框架支持通过JDBC连接数据库。你也可以通过OpenOffice框架连接到H2数据库。首先将JDBC驱动增加到OpenOffice中,下面的步骤可以连接到H2数据库:
· 启动OpenOffice Writer,进入[Tools], [Options]
· 确认你在OpenOffice.org / Java中选择了JAVA运行环境
· 单击 [Class Path...], [Add Archive...]
· 选择你的h2的jar文件(本机上的路径可以由你选择)
· 单击 [OK] (按要求的点击), 停止OpenOffice (包括Quickstarter)
· 启动OpenOffice框架
· 连接到一个存在的数据库;选择 [JDBC]; [Next]
· 输入数据库URL,如: jdbc:h2:~/test
· 输入JDBC驱动类: org.h2.Driver
你可以访问存于用户当前目录的数据库。使用H2数据通过NeoOffice (去掉X11的OpenOffice):
· 在NeoOffice,到[NeoOffice], [Preferences]
· 在[NeoOffice]页下找到[Java]
· 单击[Class Path], [Add Archive...]
· 选择h2的jar文件(本地目录,任你选择合适的目录)
· 单击[OK](根据需要),重启NeoOffice.
现在,你可以通过"Database Wizard"创建一新的数据库:
· 单击[File], [New], [Database].
· 选择[Connect to existing database],并且选择[JDBC],单击next.
· 输入数据源的URL,例如:jdbc:h2:~/test
· JDBC驱动类: org.h2.Driver
其他的在NeoOffice中使用H2的方法:
· 将H2的jar包打包到一个扩展包中
· 在NeoOffice中作为扩展JAVA包进行安装
这个能通过使用NetBeans OpenOffice插件来创建。详细看Extensions Development.
当使用/ JNLP (JAVA网络加载协议)启动JAVA WEB,允许访问标签必须被设置在.jnlp文件,并且.jar的应用文件必须被签名,否则,当你试着去写文件系统,下面的异常将会被抛出:java.security.AccessControlException: access denied (java.io.FilePermission ... read). 如访问标签:
<security>
<all-permissions/>
</security>
如果H2的数据库已经打开,打开一个连接很快。如果要打开和关闭许多连接,使用连接池,可以提升性能。H2包含了一个简单的连接池,它是基于Christian d'Heureuse的Mini Connection Pool Manager。还有其他更复杂的开源连接池可以使用,如Apache Commons DBCP。H2从内置连接池获取连接比使用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);
PUBLIC是schema的名字, 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控制台,你能增加Lucene的jar文件到环境变量H2DRIVERS或CLASSPATH中。通过下面的语句初始化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);
PUBLIC是schema名, 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框架中启动和停止H2的TCP服务:
<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方法能防止热振动和重启异常。
相关推荐
《H2Database中文教程》是针对数据库管理系统H2Database的一款详尽指南,旨在帮助学习者理解和掌握这款轻量级、高性能的Java嵌入式数据库。H2Database以其易用性、灵活性和广泛的特性集,成为了开发者进行测试和小型...
H2数据库是一个开源的关系型数据库管理系统,由Java编写,能够嵌入到Java应用程序中运行,同时也提供网络版支持。H2遵循SQL标准,与多种Java持久层框架兼容,如Hibernate和EclipseLink,并且支持集群环境。在使用H2...
H2就不做很多介绍了。资源包内容列表是我进行H2预研是收集的H2...9、H2Database中文教程.doc 10、H2内存数据库h2部署操作手册.docx 11、H2内存数据库安装与维护.doc 12、H2数据库基础知识.docx 13、H2数据库使用.doc
H2Database是一款轻量级、开源的嵌入式和服务器模式的Java数据库,适用于测试、开发和嵌入式系统中的数据存储。它以其高性能、易用性和灵活性而受到开发者的欢迎。本文将深入探讨H2Database的高级特性,帮助你更好地...
【使用JAVA内存数据库h2database性能优化】 在开发应用程序时,我们经常遇到性能瓶颈,特别是当涉及到大量的IO操作时。数据库访问是这类问题的主要来源,特别是在处理高并发、实时计算和海量数据监控的情况下。例如...
H2Database是一款轻量级、高性能的开源关系型数据库,广泛应用于嵌入式系统和测试环境。它提供了丰富的SQL支持,包括聚合函数,使得在处理大量数据时能够进行高效的统计和分析。本文档将深入探讨H2Database的聚合...
H2Database是一款轻量级、高性能的开源Java内存数据库系统,它被广泛应用于测试、开发以及嵌入式应用中。由于其支持多种数据库模式,包括单用户模式、服务器模式和混合模式,使得H2Database在各种场景下都能灵活运用...
H2Database是一款开源、轻量级、内存模式的数据库管理系统,它支持多种SQL标准,包括SQL:2003、SQL:2008和部分SQL:2011。这款数据库广泛应用于测试、开发以及嵌入式系统,因为它的易用性、高性能和灵活性。在"**H2...
h2 database 是一个开源免费的Java SQL数据库 数据库分为嵌入式 Embedding 和Server模式 要使用embedding mode 需要做以下事情: 1 添加h2 jar到classpath中 2 使用jdbc驱动:org h2 Driver 3 jdbc数据库URL:jdbc:...
标题中的“H2 database db zip 安装包”指的是包含H2数据库的压缩文件,这种格式通常用于跨平台分发,因为ZIP文件可以在Linux和Windows等操作系统上无缝解压和使用。H2数据库的zip安装包包含了运行和管理H2数据库所...
【H2DataBase+iBatis简易demo】是一个演示项目,展示了如何将轻量级的H2数据库与流行的Java持久层框架iBatis进行集成。在这个项目中,开发人员使用了MyEclipse作为IDE,并且H2数据库被配置为两种运行模式:内存模式...
H2数据库是一个由Java编写的高性能、轻量级的关系型数据库管理系统(RDBMS),它在许多场景下作为开发和测试的理想选择。由于其开源性质,H2数据库得到了全球开发者社区的支持,允许自由使用、修改和分发。下面将...
H2 Database Engine是一款轻量级、高效的开源数据库系统,专为快速开发和临时用途而设计。它的主要特点是其小巧的体积和出色的性能,这使得它成为开发者在进行项目原型设计或者测试环境搭建时的理想选择。H2 ...
"**H2Database中文教程.doc**"和"**H2Database高级特性.doc**"将进一步扩展你的知识面,包含触发器、存储过程、事务管理、索引优化等进阶主题。这些特性使得H2数据库能够满足更复杂的应用场景。 总的来说,H2数据库...
H2 database 是一个非常著名的数据库,其性能相当优秀,支持嵌入,client-server模式,支持内存表,cached,text表, 本压缩包 包含 H2 database 源代码和文档 本版本 为最新版本 2010-12-12
`H2Database中文教程.doc`为初学者提供了全面的入门指南,包括安装、配置、基本操作以及如何创建和管理数据库。通过这个文档,你可以学习到如何使用H2数据库进行数据的增删改查,以及如何执行复杂的查询语句。 **4....
H2 Database是一款基于Java开发的开源内存数据库系统,它同时支持嵌入式模式和服务器模式运行,具备了小型、快速、易于使用的特点,并提供了JDBC接口用于数据库的连接。H2数据库适合嵌入到Java应用程序中,不需要...
h2 database h2 db 数据库
在压缩包中的“H2Database”文件,可能是包含H2数据库相关的示例、文档或者工具。这些资源可以帮助用户更好地理解和使用H2数据库,例如通过示例代码学习如何在Java项目中集成H2,或者查阅文档了解其具体功能和配置...