H2数据库远程连接

H2数据库支持如下3种连接模式:

  内嵌模式(通过JDBC进行本地连接,应用和数据库在同一个JVM中)

  服务器模式(通过JDBC或ODBC或TCP/IP进行远程连接)

  混合模式(同时支持本地和远程连接)


数据库连接URL说明:

Topic

URL Format and Examples

嵌入式(本地)连接

jdbc:h2:[file:][<path>]<databaseName>
jdbc:h2:~/test
jdbc:h2:file:/data/sample
jdbc:h2:file:C:/data/sample (Windows only)

内存数据库(私有)

jdbc:h2:mem:

内存数据库(被命名)

jdbc:h2:mem:<databaseName>
jdbc:h2:mem:test_mem

使用TCP/IP的服务器模式(远程连接)

 

jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
jdbc:h2:tcp://localhost/~/test
jdbc:h2:tcp://dbserv:8084/~/sample

使用SSL/TLS的服务器模式(远程连接)

 

jdbc:h2:ssl://<server>[:<port>]/<databaseName>
jdbc:h2:ssl://secureserv:8085/~/sample;

使用加密文件

jdbc:h2:<url>;CIPHER=[AES|XTEA]
jdbc:h2:ssl://secureserv/~/testdb;CIPHER=AES
jdbc:h2:file:~/secure;CIPHER=XTEA

文件锁

jdbc:h2:<url>;FILE_LOCK={NO|FILE|SOCKET}
jdbc:h2:file:~/quickAndDirty;FILE_LOCK=NO
jdbc:h2:file:~/private;CIPHER=XTEA;FILE_LOCK=SOCKET

仅打开存在的数据库

jdbc:h2:<url>;IFEXISTS=TRUE
jdbc:h2:file:~/sample;IFEXISTS=TRUE

当虚拟机退出时并不关闭数据库

jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE

用户名和密码

jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>]
jdbc:h2:file:~/sample;USER=sa;PASSWORD=123

更新记入索引

jdbc:h2:<url>;LOG=2
jdbc:h2:file:~/sample;LOG=2

调试跟踪项设置

jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..3>
jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3

忽略位置参数设置

jdbc:h2:<url>;IGNORE_UNKNOWN_SETTINGS=TRUE

指定文件读写模式

jdbc:h2:<url>;ACCESS_MODE_LOG=rws;ACCESS_MODE_DATA=rws

Zip文件中的数据库

jdbc:h2:zip:<zipFileName>!/<databaseName>
jdbc:h2:zip:~/db.zip!/test

兼容模式

jdbc:h2:<url>;MODE=<databaseType>
jdbc:h2:~/test;MODE=MYSQL

自动重连接

jdbc:h2:<url>;AUTO_RECONNECT=TRUE
jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE

自动混合模式

jdbc:h2:<url>;AUTO_SERVER=TRUE
jdbc:h2:~/test;AUTO_SERVER=TRUE

更改其他设置

jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>...]
jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3


要想H2数据库能远程连接,必须设置其允许远程连接。

我们先来看一下H2数据库的默认设置:



由上图可知,默认情况下H2数据库的TCP服务端口为9092,客户端的端口为8082,PG服务的端口为5435。

集成H2到String中,配置H2数据库允许远程连接。(这种配置只适合嵌入式的配置,当配置了如下代码时,相当于已经启动了一个H2服务。)

<!-- Spring中h2 TCP Server 配置 -->
<bean id="h2Server" class="org.h2.tools.Server"
       factory-method="createTcpServer" init-method="start" destroy-method="stop">
       <constructor-arg value="-tcp,-tcpAllowOthers,-tcpPort,9092" />
</bean>


修改h2.bat文件

@java -cp "h2-1.4.190.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Console %* -tcpAllowOthers
@if errorlevel 1 pause


配置连接参数:

#  h2
#=============================
jdbc.driver=org.h2.Driver
jdbc.url=jdbc:h2:tcp://192.168.1.121:9092/~/test
#jdbc.url=jdbc:h2:~/test
jdbc.username=sa
jdbc.password=

hibernate.dialect=org.hibernate.dialect.H2Dialect
hibernate.use_sql_comments=false




config.initialPoolSize=10
config.minPoolSize=20
config.maxPoolSize=350
config.maxIdleTime=70
config.acquireIncrement=5           
config.idleConnectionTestPeriod=60
config.acquireRetryAttempts=5

数据源配置:

<!-- 数据源配置 -->
<bean id="dataSource" class="com.mchange.v2.c3p0.ComboPooledDataSource" destroy-method="close">
	<property name="driverClass">
		<value>${jdbc.driver}</value>
	</property>
	<property name="jdbcUrl">
		<value>${jdbc.url}</value>
	</property>
	<property name="user">
		<value>${jdbc.username}</value>
	</property>
	<property name="password">
		<value>${jdbc.password}</value>
	</property>
	 <property name="initialPoolSize">
		<value>${config.initialPoolSize}</value>
	</property>
	<property name="minPoolSize">
		<value>${config.minPoolSize}</value>
	</property>
	<property name="maxPoolSize">
		<value>${config.maxPoolSize}</value>
	</property>
		
	<property name="automaticTestTable">
		<value>${config.automaticTestTable}</value>
	</property>		 
	<property name="checkoutTimeout">
		<value>5000</value>
	</property>
	<property name="maxIdleTime">
		<value>${config.maxIdleTime}</value>
	</property>
	<property name="acquireRetryAttempts">
		<value>${config.acquireIncrement}</value>
	</property>
	<property name="acquireIncrement">
		<value>${config.acquireIncrement}</value>
	</property> 
</bean>

启动服务端h2数据库,经测试本方式连接成功。

若想让浏览器也允许远程连接可修改H2\src\tools\WEB-INF下的web.xml文件

<servlet>
        <servlet-name>H2Console</servlet-name>
        <servlet-class>org.h2.server.web.WebServlet</servlet-class>
        <init-param>
            <param-name>webAllowOthers</param-name>
            <param-value></param-value>
        </init-param>
        <init-param>
            <param-name>trace</param-name>
            <param-value></param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>


### 连接本地 H2 数据库的方法 要连接到本地 H2 数据库,通常需要完成以下几个方面的配置: #### 1. 添加依赖项 如果是在 Java 项目中使用 H2 数据库,则需先引入相应的 Maven 或 Gradle 依赖。 对于 Maven 项目,可以在 `pom.xml` 文件中添加以下依赖[^1]: ```xml <dependency> <groupId>com.h2database</groupId> <artifactId>h2</artifactId> <version>2.1.214</version> <!-- 版本号可能随时间更新 --> </dependency> ``` 对于 Gradle 项目,可以将以下内容加入 `build.gradle` 文件中[^2]: ```gradle implementation 'com.h2database:h2:2.1.214' // 版本号同上 ``` #### 2. 配置 JDBC URL 为了访问本地 H2 数据库实例,可以通过设置合适的 JDBC URL 来实现。以下是常见的几种模式及其用途说明[^3]: - **内存数据库**: 如果希望数据仅存在于运行期间而无需持久化存储,可采用如下形式的 URL: ``` jdbc:h2:mem:testdb ``` - **文件数据库**: 若要保存数据至磁盘上的特定位置,应指定路径作为参数之一: ``` jdbc:h2:~/testdb;AUTO_SERVER=TRUE ``` 此处 `~` 表示用户的主目录;启用自动服务器模式 (`AUTO_SERVER`) 可允许多个 JVM 同时访问同一数据库实例[^4]. - **TCP/IP 模式 (远程/局域网)**: 当需要通过网络接口与其他设备共享同一个 H2 实例时, 使用 TCP 协议启动服务端程序并将客户端指向该地址即可. ``` jdbc:h2:tcp://localhost/~/testdb ``` #### 3. 设置驱动类名与用户名密码 除了基本的连接字符串外,在实际应用开发过程中还需要定义其他几个重要属性来确保成功建立会话链接: - Driver Class Name: 对于标准情况而言总是固定为 `"org.h2.Driver"`。 - Username 和 Password: 默认情况下分别为 `"sa"` 和空字符串(`""`) ,不过强烈建议自定义更安全的身份验证凭据组合以保护敏感资料免受未授权访问威胁[^5]. 下面给出一段完整的 Spring Boot 应用场景下的 YML 样例配置片段供参考[^6]: ```yaml spring.datasource.url=jdbc:h2:file:./data/sample-db;DB_CLOSE_DELAY=-1;MVCC=true spring.datasource.driver-class-name=org.h2.Driver spring.datasource.username=admin spring.datasource.password=password spring.h2.console.enabled=true ``` 上述例子启用了嵌入式的 Web 控制台功能以便直观管理操作关系型表结构等内容资源. #### 4. 测试连接状态 最后一步就是编写简单的测试代码确认一切正常工作无误。这里提供了一个基础版本用于演示目的[^7]: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.Statement; public class Main { public static void main(String[] args) throws Exception{ String url = "jdbc:h2:~/test"; Connection conn = DriverManager.getConnection(url,"admin","password"); Statement stmt = conn.createStatement(); stmt.execute("CREATE TABLE IF NOT EXISTS test(id INT PRIMARY KEY, name VARCHAR(255))"); System.out.println("Database connection established."); conn.close(); } } ``` 以上即完成了从环境搭建直至初步交互整个流程概述介绍。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值