首页 > 技术文章 > H2嵌入式数据库使用

dagger9527 2019-11-11 17:06 原文

通常,我们在使用数据库一般都首选mysql
但是,今天我将介绍一款能够嵌入到java程序中的数据库,它能随着java工程移动而移动,不像mysql那样,在不同的机器上必须要改配置和重新导入一遍导入数据。

  • 首先,进入h2的 官网, 选择All Platforms版本进行下载

    在你的目录下会得到这么一个文件


解压到当前目录,进入到h2/bin目录下

有一个h2-*.jar,在命令行下运行java -jar h2-1.4.197.jar
它会在浏览器上自动打开一个h2数据库的管理页面

  • 在最上方可以选择语言
  • JDBC URL:jdbc:h2:后面跟着的是数据库文件所在的本地绝对路径名, 也就是cc数据库在桌面
  • User Name: 当前数据库所属的用户名
  • Password: 用户密码
    点击Connect连接成功, 这时候,桌面会生成一个数据库文件:cc.mv.db

    这就是我们的h2数据库文件

在数据库管理页面上的写上建标语句, 并点击运行, 执行成功

如果出现错误信息报错了话, 会在cc.mv.db所在的目录生成一个cc.trace.db文件, 这个文件是专门用来存放错误日志的

打开看一下: 里面报的都是一些java错误日志

在浏览器中对h2数据库进行数据操作的话,会没有代码提示,这非常的不方便。所以我推荐使用一个数据库可视化连接工具 -> dbeaver 这是免费且跨平台的工具,自行下载安装
打开dbeaver,在连接选项中找到h2 -> Embedded

  • 数据库/模式:h2数据库文件的路径
  • 用户名:数据库的用户名
  • 密码:数据库的密码
    进入编辑驱动设置,我们需要添加一个驱动包,我们删除原来的jar包,将我们之前bin目录下的h2-*.jar添加进去, 点击下一步, 完成,这时候,我们已经连接成功了。
    注意,h2数据库只能拥有一个连接,不能有多个连接,所以我们在使用dbeaver连接h2数据库时,必须关掉控制台上让浏览器运行的连接。

    public下的users表就是我们刚刚创建的, 来插入几条数据。
    在工具栏下找到SQL编辑器

    选中所有数据,按ctrl+enter, 运行所有代码

    这时候,数据已经有了
    我们来将h2数据卡应用到java程序中,首先,关闭dbeaver的连接,当有其它进程在对当前数据库进行操作时,你是不能对它进行操作的
    将cc.mv.db复制到java工程的db文件夹下,并导入h2数据库的驱动包h2-*.jar

    cc.trace.db是错误日志信息,当java程序出错是,会在cc.mv.db所在的文件夹下生成
  • 使用jdbc连接
package cn.java2016.demo1;

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

import org.h2.tools.Server;

public class H2DatabaseDemo
{
    private static String driver = "org.h2.Driver"; // h2数据库驱动类
    private static String url = "jdbc:h2:./db/cc";  // cc数据库所在目录及数据库名
    private static String user = "root";    // 数据库用户名
    private static String password = "root";    // 数据库密码
    
    public static void main(String[] args) throws SQLException, ClassNotFoundException
    {
    	Server server = Server.createTcpServer().start();
    	Class.forName(driver);
    	Connection conn = DriverManager.getConnection(url, user, password);
    	Statement stat = conn.createStatement();
    	ResultSet resultSet = stat.executeQuery("SELECT * FROM users;");
    	while (resultSet.next())
    	{
            System.out.println(resultSet.getObject(1) + " : " + resultSet.getObject(2) + " : " + resultSet.getObject(3));
    	}
    	resultSet.close();
    	stat.close();
    	conn.close();
    	
    	server.stop();	// 关闭h2服务
    }
}

运行java程序,我们已经将数据取出来了

推荐阅读