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. Asp.net WebPages框架运行原理浅析(转)

    在Asp.net4和4.5中,新增了WebPages Framework,编写页面代码使用了新的Razor语法,代码更加的简洁和符合Web标准,编写方式更接近于PHP和以前的Asp,和使用 WebFo ...

  2. XML 学习介绍 收藏

    XML学习总结(一)——XML介绍 一.XML概念 Extensible Markup Language,翻译过来为可扩展标记语言.Xml技术是w3c组织发布的,目前推荐遵循的是W3C组织于2000发 ...

  3. 大一上学期的一点小疑惑,代码验证ok

    #include<iostream> using namespace std; class test { int *p; int pn; public: test(int n) { p = ...

  4. Buffer Overflow Study

    -- These days I learned and studied buffer overflow. I like to write on the paper and it can keep sy ...

  5. Stanford机器学习笔记-5.神经网络Neural Networks (part two)

    5 Neural Networks (part two) content: 5 Neural Networks (part two) 5.1 cost function 5.2 Back Propag ...

  6. Java开发之JSP指令

    一.page指令 page指令是最常用的指令,用来说明JSP页面的属性等.JSP指令的多个属性可以写在一个page指令里,也可以写在多个指令里.但需要注意的是,无论在哪个page指令里的属性,任何pa ...

  7. 洛谷P1120小木棍[DFS]

    题目描述 乔治有一些同样长的小木棍,他把这些木棍随意砍成几段,直到每段的长都不超过50. 现在,他想把小木棍拼接成原来的样子,但是却忘记了自己开始时有多少根木棍和它们的长度. 给出每段小木棍的长度,编 ...

  8. LoadRunner 12.02 安装教程及中文语言包安装

    注意事项: 安装前,把所有的杀毒软件和防火墙关闭. 若以前安装过LoadRunner,则将其卸载. 安装路径不要带中文字符. LoadRunner 12已经不再支持xp系统,仅支持win7和win8系 ...

  9. guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用

    guava 学习笔记(二) 瓜娃(guava)的API快速熟悉使用 1,大纲 让我们来熟悉瓜娃,并体验下它的一些API,分成如下几个部分: Introduction Guava Collection ...

  10. poj[3093]Margaritas On River Walk

    Description One of the more popular activities in San Antonio is to enjoy margaritas in the park alo ...