Connection Modes
The following connection modes are supported:
- Embedded mode (local connections using JDBC)
- Remote mode (remote connections using JDBC or ODBC over TCP/IP)
- Mixed mode (local and remote connections at the same time)
Embedded Mode
In embedded mode, an application opens a database from within the same JVM using JDBC. This is the fastest and easiest connection mode. The disadvantage is that a database may only be open in one virtual machine (and class loader) at any time. As in all modes, both persistent and in-memory databases are supported. There is no limit on the number of database open concurrently, or on the number of open connections.
Remote Mode
When using the remote mode (sometimes called server mode or client/server mode), an application opens a database remotely using the JDBC or ODBC API. A server needs to be started within the same or another virtual machine (or on another computer). Many applications can connect to the same database at the same time. The remote mode is slower than the embedded mode, because all data is transferred over TCP/IP. As in all modes, both persistent and in-memory databases are supported. There is no limit on the number of database open concurrently, or on the number of open connections.
Mixed Mode
The mixed mode is a combination of the embedded and the remote mode. The main application connects to a database in embedded mode, but also starts a server so that other applications (running in different virtual machines) can concurrently access the same data. The embedded connections are as fast as if the database is used in just the embedded mode, while the remote connections are a bit slower.
Mixed Mode Deploy
Method 1: Start server in J2EE application
Java Code (MixedMode.java):
package org.h2.samples;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import org.h2.tools.Server;
/**
* This sample program opens the same database once in embedded mode,
* and once in the server mode. The embedded mode is faster, but only
* the server mode supports remote connections.
*/
public class MixedMode {
/**
* This method is called when executing this sample application from the
* command line.
*
* @param args the command line parameters
*/
public static void main(String[] args) throws Exception {
// start the server, allows to access the database remotely
Server server = Server.createTcpServer(new String[] { "-tcpPort", "9101" });
server.start();
System.out.println("You can access the database remotely now, using the URL:");
System.out.println("jdbc:h2:tcp://localhost:9081/~/test (user: sa, password: sa)");
// now use the database in your application in embedded mode
Class.forName("org.h2.Driver");
Connection conn = DriverManager.getConnection("jdbc:h2:file:E:/Products/Opensource/h2/lee_test/test", "sa", "");
//Connection conn = DriverManager.getConnection("jdbc:h2:file:E:/Products/Opensource/h2/lee_test/test;AUTO_SERVER=TRUE", "sa", "");
// some simple 'business usage'
Statement stat = conn.createStatement();
stat.execute("DROP TABLE TIMER IF EXISTS");
stat.execute("CREATE TABLE TIMER(ID INT PRIMARY KEY, TIME VARCHAR)");
System.out.println("Execute this a few times: SELECT TIME FROM TIMER");
System.out.println("To stop this application (and the server), run: DROP TABLE TIMER");
try {
while (true) {
// runs forever, except if you drop the table remotely
stat.execute("MERGE INTO TIMER VALUES(1, NOW())");
Thread.sleep(1000);
}
} catch (SQLException e) {
System.out.println("Error: " + e.toString());
}
conn.close();
// stop the server
server.stop();
}
}
主程序Run后,是以Embeded模式连接,此时利用H2 Tools中的Broswer UI,进行连接(模拟另一Client),可以有以下几种连接方式:
1. jdbc:h2:tcp://localhost:9101/file:E:/Products/Opensource/h2/lee_test/test
2. jdbc:h2:tcp://localhost:9101/file:E:/Products/Opensource/h2/lee_test/test;AUTO_SERVER=TRUE
如果将程序中的黄底部分的语句换成绿底部分的语句,可以有以下几种连接方式:
1. jdbc:h2:tcp://localhost:9101/file:E:/Products/Opensource/h2/lee_test/test
2. jdbc:h2:tcp://localhost:9101/file:E:/Products/Opensource/h2/lee_test/test;AUTO_SERVER=TRUE
3. jdbc:h2:file:E:/Products/Opensource/h2/lee_test/test;AUTO_SERVER=TRUE (这种方式自动转换为Server模式,谁先连上谁是Embed模式)
Method 2: Start server via command line:
Command line:
@java -cp "h2.jar;%H2DRIVERS%;%CLASSPATH%" org.h2.tools.Server -tcp -tcpPort 9101
@if errorlevel 1 pause
Java Code (MixedMode.java):
package org.h2.samples;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
import java.sql.Statement;
import org.h2.tools.Server;
/**
* This sample program opens the same database once in embedded mode,
* and once in the server mode. The embedded mode is faster, but only
* the server mode supports remote connections.
*/
public class MixedMode {
/**
* This method is called when executing this sample application from the
* command line.
*
* @param args the command line parameters
*/
public static void main(String[] args) throws Exception {
// start the server, allows to access the database remotely
Server server = Server.createTcpServer(new String[] { "-tcpPort", "9101" });
server.start();
System.out.println("You can access the database remotely now, using the URL:");
System.out.println("jdbc:h2:tcp://localhost:9081/~/test (user: sa, password: sa)");
// now use the database in your application in embedded mode
Class.forName("org.h2.Driver");
//Connection conn = DriverManager.getConnection("jdbc:h2:file:E:/Products/Opensource/h2/lee_test/test", "sa", ""); //以Command Line方式启Server,不能使用这种方式了
Connection conn = DriverManager.getConnection("jdbc:h2:file:E:/Products/Opensource/h2/lee_test/test;AUTO_SERVER=TRUE", "sa", "");
// some simple 'business usage'
Statement stat = conn.createStatement();
stat.execute("DROP TABLE TIMER IF EXISTS");
stat.execute("CREATE TABLE TIMER(ID INT PRIMARY KEY, TIME VARCHAR)");
System.out.println("Execute this a few times: SELECT TIME FROM TIMER");
System.out.println("To stop this application (and the server), run: DROP TABLE TIMER");
try {
while (true) {
// runs forever, except if you drop the table remotely
stat.execute("MERGE INTO TIMER VALUES(1, NOW())");
Thread.sleep(1000);
}
} catch (SQLException e) {
System.out.println("Error: " + e.toString());
}
conn.close();
// stop the server
server.stop();
}
}
主程序Run后,是以Embeded模式连接,此时利用H2 Tools中的Broswer UI,进行连接(模拟另一Client),可以有以下几种连接方式:
1. jdbc:h2:file:E:/Products/Opensource/h2/lee_test/test;AUTO_SERVER=TRUE (这种方式自动转换为Server模式,谁先连上谁是Embed模式)
分享到:
相关推荐
H2就不做很多介绍了。资源包内容列表是我进行H2预研是收集的H2资料,应该是最全面的的了: ...10、H2内存数据库h2部署操作手册.docx 11、H2内存数据库安装与维护.doc 12、H2数据库基础知识.docx 13、H2数据库使用.doc
内存数据库h2database(h2-2008-11-07)
1.系统在不断实时地访问数据库时,一秒钟对同一个表操作几千,几万次以上,导致数据表死锁或则处理太慢; 2.对数据实时计算,而且数据量很大时,比如电信系统的电信的二次批价和实时累账 3. 需实时统计数据,监控...
H2内存数据库h2部署操作手册.pdf
附件内行H2内存数据库的多种模式的代码及其H2内存数据库的相关参考资料。
IT资料 常用软件 内存数据库 jar包
这是俺做内存数据库时所收到的全部资料,希望对你研究H2有帮助
内存数据库.... 一个很小的数据库调试程序
H2Database内存数据库jar包及示例.
h2内存数据库功能强大,速度快,参考价值较高
NULL 博文链接:https://yugouai.iteye.com/blog/1876827
H2 DataBase 开源 内存数据库,文中注释不多,很适合入门,有兴趣的朋友可以拿下来看看,注意阅读readme.txt
H2是一个开源的嵌入式数据库引擎,采用java语言编写,不受平台的限制,同时H2提供了一 个十分方便的web控制台用于操作和管理数据库内容。H2还提供兼容模式,可以兼容一些主 流的数据库,具有比较完备的数据库特性...
主要介绍了springboot配置内存数据库H2的详细教程,需要的朋友可以参考下
一个很小巧的内存数据库推荐给大家,用给做demo给客户演示很方便
NULL 博文链接:https://913.iteye.com/blog/1594014
h2数据库 jar包 下载 资料里面包含了一个完整的数据库 h2 h2 是一个开源的数据库,其运行之快,难以令人相信。 我测试过,往 h2里面插入十万条记录,只用了30秒的时间
h2数据库批量导出,文档描述h2数据库使用方法和数据库创建和插入脚本批量导出
H2数据库讲解(教程),h2 database 内存数据库
H2DB 数据库H2,纯JAVA