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>


### 如何配置 Navicat 连接 H2 数据库 要通过 Navicat 成功连接到 H2 数据库,需完成以下几个方面的设置: #### 1. 下载并安装 JDBC 驱动程序 H2 数据库依赖于 Java 的 JDBC 驱动来实现外部工具的连接。因此,在使用 Navicat 前,需要下载适合版本的 H2 JDBC 驱动文件 `h2*.jar` 并将其路径保存下来以便后续导入[^1]。 #### 2. 创建新的连接 在 Navicat 中创建一个新的数据库连接时,应选择 **JDBC** 类型作为目标数据库接口。以下是具体操作步骤: - 打开 Navicat 软件后点击菜单栏中的 “新建连接”。 - 在弹出窗口里找到支持自定义驱动选项的部分(通常标记为 Other 或 Custom),输入必要的参数如下表所示[^2]: | 参数名 | 描述 | |----------------|--------------------------------------------------------------------------------------| | Connection Name| 自定义名称用于识别此链接 | | Driver Type | 设置为 `org.h2.Driver`,这是官方推荐的标准类全限定名 | | URL | 形如 jdbc:h2:<path_to_db>;如果运行嵌入模式可设成类似 `jdbc:h2:~/test`;如果是服务器模式则可能是 `jdbc:h2:tcp://localhost/~/test` | 注意:URL 字符串的具体形式取决于您的 H2 实例是以何种方式部署——即本地单机版还是远程网络服务端口监听状态下的实例化过程[^3]。 #### 3. 导入 JDBC 文件至 Navicat 为了使 Navicat 可以加载来自第三方厂商开发的支持包(这里指的就是 h2*.jar),还需要手动指定其物理存储位置给应用程序读取。这一步骤一般位于高级属性或者附加组件管理界面下执行[^4]: ```bash Tools -> Options -> Drivers & Translators -> Add/Edit existing driver details. ``` 随后按照提示上传之前获取到的那个 jar 包即可生效。 #### 4. 测试连接成功与否 当以上所有前期准备工作都完成后就可以尝试发起实际握手请求验证整个流程是否通畅无误了。只需返回初始页面按下 Test Button 即能迅速得知结果反馈消息[^5]。 ```python import jaydebeapi as jd conn_str = 'jdbc:h2:/path/to/dbfile' driver_name='org.h2.Driver' username="sa" password="" jars=['path/to/h2*.jar'] try: conn = jd.connect(driver_name, conn_str , [username,password], jars ) except Exception as e: print(f'Error occurred:{e}') finally: if 'conn' in locals(): conn.close() ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值