H2数据库入门总结(二)

一、搭建测试环境和项目

1.1 搭建web测试项目

创建一个【H2DBTest】JavaWeb项目,找到H2数据库的jar文件,如下图:


H2数据库就一个jar文件,这个Jar文件里面包含了使用JDBC方式连接H2数据库时使用的驱动类,将"h2-1.4.197.jar"加入到【H2DBTest】项目中,如下图所示:


1.2 开启H2数据库

进到h2/bin目录,如下图


确保H2数据库使用的8082端口没有被其他应用程序占用,正常启动之后输入"http://localhost:8082"进行简单的测试,如下图所示:


二、在java中操作H2数据库

2.1 以嵌入式(本地)连接方式连接H2数据库

这种方式连接方式默认情况下只允许一个客户端连接到H2数据库,有客户端连接到H2数据库之后,此时数据库文件就会被锁定,那其他客户端就无法再连接了。所以在运行后面的例子之前,刚才打开的H2 Console 如果登录进数据库,需要断开连接,防止占用。

连接语法:jdbc:h2:[file:][<path>]<databaseName>

例如:
jdbc:h2:~/test//连接位于用户目录下的test数据库
jdbc:h2:file:/data/sample

jdbc:h2:file:E:/H2/gacl(Windowsonly)

测试例子:

package jdbc.conn.h2.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.UUID;


public class H2ConnTest1 {
	//数据库连接URL,当前连接是E:/H2目录下的jiaox数据库
	private static final String JDBC_URL ="jdbc:h2:E:/H2/jiaox";
	//连接数据库时使用的用户名
	private static final String USER = "jiaox";
	//连接数据库的密码
	private static final String PASSWORD="1234";
	//连接数据哭的驱动类,org.h2.Driver 这个类是由H2数据库自己提供的,在H2数据库的jar包中可以找到
	private static final String DRIVER_CLASS ="org.h2.Driver";
	public static void main(String[] args) throws Exception {
		//加载H2数据库驱动
		Class.forName(DRIVER_CLASS);
		Connection conn= DriverManager.getConnection(JDBC_URL,USER,PASSWORD);
		Statement stmt=conn.createStatement();
		stmt.execute("DROP TABLE IF EXISTS USER_INFO");
		//创建USER_INFO表
		stmt.execute("CREATE TABLE USER_INFO(id VARCHAR(36) PRIMARY KEY,name VARCHAR(100),sex VARCHAR(4))");
		        //新增
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','大日如来','男')");
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','青龙','男')");
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','白虎','男')");
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','朱雀','女')");
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','玄武','男')");
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','苍狼','男')");
		//删除
		stmt.executeUpdate("DELETE FROM USER_INFO WHERE name='大日如来'");
		//修改
		stmt.executeUpdate("UPDATE USER_INFO SET name='孤傲苍狼' WHERE name='苍狼'");
		//查询
		ResultSet rs = stmt.executeQuery("SELECT * FROM USER_INFO");
		//遍历结果集
		while (rs.next()) {
			System.out.println(rs.getString("id") + "," + rs.getString("name")+ "," + rs.getString("sex"));
		}
		//释放资源
		stmt.close();
		//关闭连接
		conn.close();


	}
}

运行后结果:


登录到H2控制台当中也可以看到创建好的USER_INFO表和表里面的数据,如下图所示:



2.2 使用TCP/IP 的服务器模式(远程连接) 方式 连接到H2数据库

这种连接方式就和其他数据库类似了,是基于Service的形式进行连接的,因此允许多个客户端同时连接到H2数据库

连接语法: jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>

范例:jdbc:h2:tcp://localhost/~/test

1)首先先搭建一个可供远程访问的数据库,因为之前配置的h2数据库默认情况下是拒绝被访问的

      在H2DBTest项目的WEB-INF目录下新建h2文件夹,将jiaox数据库文件放到其中,如下图:


    然后在H2DBTest目录下建一个db.bat文件,

    

    内容如下:

set "PRGDIR=%cd%"

if "%JAVA_HOME%" == "" goto noJavaHome
set _RUNJAVA="%JAVA_HOME%\bin\java.exe"
goto okJava

:noJavaHome
set _RUNJAVA=java
rem -Dh2.bindAddress=localhost
:okJava
%_RUNJAVA% -cp "%PRGDIR%/lib/local/h2-1.4.196.jar" org.h2.tools.Server -tcp -tcpAllowOthers -baseDir "%PRGDIR%/build/h2"

然后运行该bat文件,出现如下结果即可访问:


2)编写测试代码,如下:

package jdbc.conn.h2.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.UUID;

public class H2ConnTest2 {
	// 数据库连接URL,通过使用TCP/IP的服务器模式(远程连接),当前连接的是E:/H2目录下的gacl数据库
	// private static final String JDBC_URL =
	// "jdbc:h2:tcp://localhost/E:/H2/gacl";
	// private static final String JDBC_URL =
	// "jdbc:h2:tcp://127.0.0.1/E:/H2/gacl";
	private static final String JDBC_URL = "jdbc:h2:tcp://127.0.0.1:9092/./jiaox";
	// 连接数据库时使用的用户名
	private static final String USER = "jiaox";
	// 连接数据库时使用的密码
	private static final String PASSWORD = "1234";
	// 连接H2数据库时使用的驱动类,org.h2.Driver这个类是由H2数据库自己提供的,在H2数据库的jar包中可以找到
	private static final String DRIVER_CLASS = "org.h2.Driver";

	public static void main(String[] args) throws Exception {
		// 加载H2数据库驱动
		Class.forName(DRIVER_CLASS);
		// 根据连接URL,用户名,密码获取数据库连接
		Connection conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD);
		Statement stmt = conn.createStatement();
		// 如果存在USER_INFO表就先删除USER_INFO表
		stmt.execute("DROP TABLE IF EXISTS USER_INFO");
		// 创建USER_INFO表
		stmt.execute("CREATE TABLE USER_INFO(id VARCHAR(36) PRIMARY KEY,name VARCHAR(100),sex VARCHAR(4))");
		// 新增
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()
				+ "','大日如来','男')");
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()
				+ "','青龙','男')");
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()
				+ "','白虎','男')");
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()
				+ "','朱雀','女')");
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()
				+ "','玄武','男')");
		stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()
				+ "','苍狼','男')");
		// 删除
		stmt.executeUpdate("DELETE FROM USER_INFO WHERE name='大日如来'");
		// 修改
		stmt.executeUpdate("UPDATE USER_INFO SET name='孤傲苍狼' WHERE name='苍狼'");
		// 查询
		ResultSet rs = stmt.executeQuery("SELECT * FROM USER_INFO");
		// 遍历结果集
		while (rs.next()) {
			System.out.println(rs.getString("id") + "," + rs.getString("name")
					+ "," + rs.getString("sex"));
		}
		// 释放资源
		stmt.close();
		// 关闭连接
		conn.close();
	}

}

2.3  H2数据库的内存模式

    H2数据库被称为内存数据库,因为它支持在内存中创建数据库和表

    范例如下:

package jdbc.conn.h2.test;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.Statement;
import java.util.UUID;

public class TestMeH2 {
	 //数据库连接URL,通过使用TCP/IP的服务器模式(远程连接),当前连接的是内存里面的gacl数据库
	 private static final String JDBC_URL = "jdbc:h2:tcp://localhost/mem:jiaox";
	//连接数据库时使用的用户名
	private static final String USER = "jiaox";
	//连接数据库时使用的密码
	private static final String PASSWORD = "1234";
	//连接H2数据库时使用的驱动类,org.h2.Driver这个类是由H2数据库自己提供的,在H2数据库的jar包中可以找到
	private static final String DRIVER_CLASS="org.h2.Driver";
	 
	public static void main(String[] args) throws Exception {
	// 加载H2数据库驱动
	Class.forName(DRIVER_CLASS);
	 // 根据连接URL,用户名,密码获取数据库连接
	Connection conn = DriverManager.getConnection(JDBC_URL, USER, PASSWORD);
	Statement stmt = conn.createStatement();
	//如果存在USER_INFO表就先删除USER_INFO表
	stmt.execute("DROP TABLE IF EXISTS USER_INFO");
	//创建USER_INFO表
	stmt.execute("CREATE TABLE USER_INFO(id VARCHAR(36) PRIMARY KEY,name VARCHAR(100),sex VARCHAR(4))");
	 //新增
	stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','大日如来','男')");
	stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','青龙','男')");
	stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','白虎','男')");
	stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','朱雀','女')");
	stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','玄武','男')");
	stmt.executeUpdate("INSERT INTO USER_INFO VALUES('" + UUID.randomUUID()+ "','苍狼','男')");
	//删除
	stmt.executeUpdate("DELETE FROM USER_INFO WHERE name='大日如来'");
	//修改
	stmt.executeUpdate("UPDATE USER_INFO SET name='孤傲苍狼' WHERE name='苍狼'");
	//查询
	ResultSet rs = stmt.executeQuery("SELECT * FROM USER_INFO");
	//遍历结果集
	while (rs.next()) {
		System.out.println(rs.getString("id") + "," + rs.getString("name")+ "," + rs.getString("sex"));
	}
	//释放资源
	stmt.close();
	//关闭连接
	conn.close();
	}

}

运行结果如下


注意:如果使用H2数据库的内存模式,那么我们创建的数据库和表都只是保存在内存中,一旦服务器重启,那么内存中的数据库和表就不存在了。













  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值