h2数据库是一个由纯java编写轻量级内嵌数据库,仅一个jar文件,约1M左右,能执行标准crud操作,支持事务,可文件模式,也可内存模式,在编写小应用程序需要用到一些数据库操作有不希望安装数据库的话最合适不过了
h2有不同的运行模式
内存模式(In-Memory)
url: jdbc:h2:mem:test
内存中创建一个名为test的数据库,不会持久化,最后一个连接断开后关闭数据库,多个线程可同时访问,但数据仅同进程可见
嵌入式(Embedded)
url: jdbc:h2:~/test jdbc:h2:/data/db/test jdbc:h2:db/test
允许单一进程任意时间访问数据库
服务模式(client/server)
url: jdbc:h2:tcp://localhost/~/test
访问远程地址用户目录下的test数据库,所有客户端访问同一数据库
混合模式(Mixed)
jdbc:h2:~/test;AUTO_SERVER=TRUE
内嵌模式与服务模式混合使用,本地使用内嵌模式访问,远程使用服务模式访问(速度略慢)
url后面可指定相应参数如:
MODE=MySQL:兼容模式[DB2、Derby、Oracle、MSSQLServer]...
AUTO_SERVER=TRUE:自动混合模式,不支持内存模式
DB_CLOSE_DELAY=-1:最后一个连接关闭后不关闭数据库
server模式下启动数据库示例:
final static String DRIVER_CLASS_NAME = "org.h2.Driver";
static String URL = "jdbc:h2:tcp://localhost:9092/~/test5";
static String DB_PORT = "9092";
static String WEB_PORT = "8088";
final static String USERNAME = "";
final static String PASSWORD = "";
public static void main(String[] args) throws Exception {
checkParam(args);
Server.createTcpServer("-tcp", "-tcpPort", DB_PORT).start();
Server.createWebServer("-webAllowOthers", "-webPort", WEB_PORT).start();//webAllowOthers web管理端允许外部访问
Class.forName(DRIVER_CLASS_NAME);
Connection conn = DriverManager.getConnection(URL,USERNAME,PASSWORD);
Statement stat = conn.createStatement();
HikariDataSource basicDataSource = new HikariDataSource();
stat.execute("DROP TABLE IF EXISTS TEST9;CREATE MEMORY Table TEST9(NAME VARCHAR)");
stat.execute("INSERT INTO TEST9 VALUES('Hello World')");
stat.execute("INSERT INTO TEST9 VALUES('Hello World')");
stat.execute("INSERT INTO TEST9 VALUES('Hello World')");
stat.execute("INSERT INTO TEST9 VALUES('Hello World')");
stat.execute("INSERT INTO TEST9 VALUES('Hello World')");
ResultSet resultSet = stat.executeQuery("SELECT * FROM TEST9");
while (resultSet.next()){
System.out.println(resultSet.getObject(1));
}
System.out.println("jdbcUrl:"+URL);
System.out.println("webUrl:http://127.0.0.1:"+WEB_PORT+"/login.jsp");
conn.close();
}
private static void checkParam(String[] args) {
if(args!=null){//如果传入参数第一个为数据库端口,第二个为web管理端口
if(args.length==1){
DB_PORT = args[0];
URL = "jdbc:h2:tcp://localhost:"+args[0]+"/~/test5";
}
if(args.length>1){
URL = "jdbc:h2:tcp://localhost:"+args[0]+"/~/test5";
DB_PORT = args[0];
WEB_PORT = args[1];
}
}
}
相关依赖
<dependencies>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.3.176</version>
</dependency>
<dependency>
<groupId>com.zaxxer</groupId>
<artifactId>HikariCP</artifactId>
<version>2.4.6</version>
</dependency>
</dependencies>