1、纯手动start/stop

 package com.cnblogs.yjmyzz.h2;

 import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; import org.h2.tools.Server;
import org.junit.Test; public class H2ServerTest { @Test
public void h2Test() {
start();
crudTest();
stop();
} private Server server; public void start() {
try {
System.out.println("正在启动h2...");
server = Server.createTcpServer(
new String[] { "-tcp", "-tcpAllowOthers", "-tcpPort",
"8043" }).start();
System.out.println("启动成功:" + server.getStatus());
} catch (SQLException e) {
System.out.println("启动h2出错:" + e.toString()); e.printStackTrace();
throw new RuntimeException(e);
}
} public void stop() {
if (server != null) {
System.out.println("正在关闭h2...");
server.stop();
System.out.println("关闭成功.");
}
} public void crudTest() {
try {
Class.forName("org.h2.Driver"); // connect to h2
Connection conn = DriverManager.getConnection(
"jdbc:h2:./h2db/sxaz42b4", "sa", "sa"); Statement stat = conn.createStatement(); // create table
stat.execute("CREATE TABLE TEST(NAME VARCHAR)"); // insert table
stat.execute("INSERT INTO TEST VALUES('菩提树下的杨过')");
stat.execute("INSERT INTO TEST VALUES('http://yjmyzz.cnblogs.com/')"); // retrive data
ResultSet result = stat.executeQuery("select name from test ");
int i = 1;
while (result.next()) {
System.out.println(i++ + ":" + result.getString("name"));
} // drop table
stat.execute("DROP TABLE TEST"); result.close();
stat.close();
conn.close();
} catch (Exception e) {
e.printStackTrace();
}
} }

输出:

正在启动h2...
启动成功:TCP server running at tcp://192.168.1.100:8043 (others can connect)
1:菩提树下的杨过
2:http://yjmyzz.cnblogs.com/
正在关闭h2...
关闭成功.

2、借助Spring

     <bean id="h2Server" class="org.h2.tools.Server"
factory-method="createTcpServer" init-method="start" destroy-method="stop">
<constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,8043" />
</bean>

示例代码:

 package com.cnblogs.yjmyzz.h2;

 import java.sql.SQLException;

 import org.h2.tools.Server;
import org.springframework.context.ApplicationContext;
import org.springframework.context.support.AbstractApplicationContext;
import org.springframework.context.support.ClassPathXmlApplicationContext; public class App { public static void main(String[] args) throws SQLException,
ClassNotFoundException { ApplicationContext context = new ClassPathXmlApplicationContext(
"spring-context.xml"); Server h2Server = context.getBean(Server.class);
System.out.println(h2Server.getStatus()); H2ServerTest test = new H2ServerTest();
test.crudTest(); ((AbstractApplicationContext) context).close(); } }

输出:

TCP server running at tcp://192.168.1.100:8043 (others can connect)
1:菩提树下的杨过
2:http://yjmyzz.cnblogs.com/

注:用Spring注入的方式,不用刻意手动处理h2Server的start/stop

3、随webApp启动时,自动启动h2 server

a) 在web.xml最开头加入下面这段

     <!-- h2 -->
<listener>
<listener-class>org.h2.server.web.DbStarter</listener-class>
</listener>
<context-param>
<param-name>db.url</param-name>
<param-value>jdbc:h2:r:/h2db/awbprint/x4z5gjb3</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>

注:具体的文件位置及用户名、密码请自行修改,如果只允许本机连接,把

<context-param>
        <param-name>db.tcpServer</param-name>
        <param-value>-tcpAllowOthers</param-value>
    </context-param>

去掉即可.

b) 然后在spring配置中参考下面的内容

     <bean id="dataSource" class="org.h2.jdbcx.JdbcConnectionPool"
destroy-method="dispose">
<constructor-arg>
<bean class="org.h2.jdbcx.JdbcDataSource">
<!-- 文件方式:必须与web.xml中配置的h2db文件名一致 -->
<property name="URL" value="jdbc:h2:r:/h2db/awbprint/x4z5gjb3" />
<property name="user" value="sa" />
<property name="password" value="sa" />
</bean>
</constructor-arg>
</bean>

这样,webapp启动时,会先启动h2 server,后面的代码就能连接到h2了。其它应用也可以用 jdbc:h2:tcp://172.21.129.181/r:/h2db/awbprint/x4z5gjb3 的方式连接到该h2 server (中间加粗的红色IP地址,为web server对应的IP地址)

java:如何用代码控制H2 Database启动的更多相关文章

  1. iOS如何用代码控制以不同屏幕方向打开新页面?

    转载:http://blogread.cn/it/article/7765?f=wb#original 代码示例:https://github.com/johnlui/Swift-On-iOS/tre ...

  2. 使用XML文件和Java代码控制UI界面

    Android推荐使用XML文件设置UI界面,然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller,是模型(model)-视图(view)-控制 ...

  3. java I/O进程控制,重定向 演示样例代码

    java I/O进程控制,重定向 演示样例代码 package org.rui.io.util; import java.io.*; /** * 标准I/O重定向 */ public class Re ...

  4. Android学习笔记(9):使用XML文件和Java代码控制UI界面

    Android推荐使用XML文件设置UI界面.然后用Java代码控制逻辑部分,这体现了MVC思想. MVC全名是Model View Controller.是模型(model)-视图(view)-控制 ...

  5. H2 Database入门

    H2 Database做为轻量级的内嵌数据库,功能十分强大,而且运行时只需要一个jar包即可,下表是官网的描述: 更详细的对比见官网页面: http://www.h2database.com/html ...

  6. H2 database 操作操作内存表

    本例开发工具为 NetBeans,使用b2前提安装jdk. 第一步:在官网下载驱动包 :http://www.h2database.com ,本例版本为: h2-1.4.192.jar 第二步:安装开 ...

  7. 使用Jacoco获取 Java 程序的代码执行覆盖率

    Jacoco是Java Code Coverage的缩写,顾名思义,它是获取Java代码执行覆盖率的一个工具,通常用它来获取单元测试覆盖率.它通过分析Java字节码来得到代码执行覆盖率,因此它还可以分 ...

  8. Spring Boot + Mybatis + H2 database数据库

    H2 Database H2 由纯 Java 编写的开源关系数据库,可以直接嵌入到应用程序中,不受平台约束,便于测试. h2数据库特点 (1)性能.小巧 (2)同时支持网络版和嵌入式版本,另外还提供了 ...

  9. 利用Java Agent进行代码植入

    利用Java Agent进行代码植入 Java Agent 又叫做 Java 探针,是在 JDK1.5 引入的一种可以动态修改 Java 字节码的技术.可以把javaagent理解成一种代码注入的方式 ...

随机推荐

  1. Scrum Master 面试题 – 你必须知道的22个Scrum基础知识

    以下的22个问题基本上涵盖了Scrum所涉及的内容,如果你能够正确回答出所有问题,那么你已经具备了作为一名Scrum Master的基本素质:当然,作为一名合格的Scrum Master,更重要的是你 ...

  2. 写在复习MVC后

    MVC的一些 今天把MVC复习了下,包括官方文档以及各种中文博客. 官方文档里面最能说明的问题的图片,相对于传统的MVC,苹果分离了View和Model之间的通信,实现了更好的复用性.我觉得MVC更 ...

  3. 网络编程2--毕向东java基础教程视频学习笔记

    Day 23 08 Udp接收端09 Udp键盘录入数据方式10 Udp聊天11 TCP传输12 TCP传输213 TCP练习14 TCP复制文件 08 Udp接收端 需求:定义一个应用程序,用于接收 ...

  4. PHP 类型判断和NULL,空值检查

    PHP是一种宽松类型的编程语言,在函数中对传入的参数值的“类型”以及”值是否为空或者NULL“进行检查是不可缺少的步骤. 类型检查 从PHP5开始,PHP允许对函数的参数进行类型约束,即可以约束参数的 ...

  5. 万能面试问题大全,教你怎么回答,怎么拿下offer

    一.你对薪资的要求? 回答提示: 说实话,大家找工作,都希望找个高薪的,那我们如何和公司去谈薪酬呢?如果你对薪酬的要求太低,那显然贬低自己的能力:如果你对薪酬的要求太高,那又会显得你分量过重,公司受用 ...

  6. 安装了SQL2005再安装SQL 2008R2,提示此计算机上安装了 Microsoft Visual Studio 2008 的早期版本和检查是否安装了 SQL Server 2005 Express 工具的解决方案

    工作电脑上安装了SQL 2005, 但是客户电脑上安装的是SQL 2008R2,有时候连接他们的库调试没法连接,很不方便.然后又安装了个SQL2008 R2,期间遇到这两个问题,网上搜索了一下收到了解 ...

  7. 网页实时聊天之js和jQuery实现ajax长轮询

    众所周知,HTTP协议是无状态的,所以一次的请求都是一个单独的事件,和前后都没有联系.所以我们在解决网页实时聊天时就遇到一个问题,如何保证与服务器的长时间联系,从而源源不段地获取信息. 一直以来的方式 ...

  8. Linux laptop-mode 电池供电时鼠标间歇失灵问题解决

    /*本文地址http://www.cnblogs.com/go2bed/p/4298689.html */ 这个问题网上已经有很多人讨论过了.例如<解决ubuntu使用笔记本自带电池后鼠标断电或 ...

  9. redis参数优化

    redis内存管理方式,支持tcmalloc,jemalloc,malloc三种内存分配,memcache使用slabs,malloc等内存分配方式. 简单点,就是redis,是边用边申请,使用现场申 ...

  10. Angular+Flask搭建一个记录工具

    平时用的最多的文本编辑器就是Notepad++,很多东西都是通过Notepad++直接记录的: 没有看完的网页链接 要整理.收藏的网页 读书笔记 要处理的事情 待看/看过的文档和电子书 等等... 随 ...