zoukankan      html  css  js  c++  java
  • H2数据库入门,看这篇就对了

    H2数据库是一个开源的关系型数据库。

    H2是一个采用java语言编写的嵌入式数据库引擎,只是一个类库(即只有一个 jar 文件),可以直接嵌入到应用项目中,不受平台的限制

    应用场景:

    • 可以同应用程序打包在一起发布,可以非常方便地存储少量结构化数据
    • 可用于单元测试
    • 可以用作缓存,即当做内存数据库

    H2的产品优势:

    • 纯Java编写,不受平台的限制;
    • 只有一个jar文件,适合作为嵌入式数据库使用;
    • h2提供了一个十分方便的web控制台用于操作和管理数据库内容;
    • 功能完整,支持标准SQL和JDBC。麻雀虽小五脏俱全;
    • 支持内嵌模式、服务器模式和集群。

    安装

    在这里插入图片描述

    建议下载 All Platforms 的,Linux版本的也在里面。

    解压后目录如下:

    h2/
    |--bin/
    |  |--h2-1.4.200.jar
    |  |--h2.bat
    |  |--h2.sh
    |  |--h2w.bat
    |--docs/
    |--service/
    |--src/
    |--build.bat
    |--build.sh
    

    目录说明:

    h2-1.4.200.jar   H2数据库的jar包
    
    h2.bat           Windows控制台启动脚本
    
    h2.sh            Linux控制台启动脚本
    
    h2w.bat          Windows控制台启动脚本 
    
    build.bat        windows构建脚本
    
    build.sh         linux构建脚本
    
    docs             H2数据库的帮助文档(内有H2数据库的使用手册)
    
    service          通过wrapper包装成服务。
    
    src              H2数据库的源代码
    

    启动

    win10下启动:

    进入H2 的bin目录,运行 h2.bat 或 h2w.bat(区别为h2w.bat是后台静默运行)

    系统会进入H2 数据库的Web Console,http://<你的ip>:8082

    在这里插入图片描述

    jdbc:h2:D:/software/h2/data/test,会在指定路径下创建一个名为 test.mv.db 的数据库,你可能还会看到一个 test.trace.db 的文件,这个是h2的错误信息,可以直接打开看。有没有跟我一样好奇为啥名称里面有个mv,这是因为高版本的H2存储引擎默默认为mvStore,文档最后面有讲这个存储引擎的。

    点击Connect,进入管理终端

    在这里插入图片描述

    运行模式与运行方式

    运行模式

    H2有三种运行模式。

    1. 内嵌模式(Embedded Mode):内嵌模式下,应用和数据库同在一个JVM中,通过JDBC进行连接。可持久化,但同时只能一个客户端连接。内嵌模式性能会比较好。
    2. 服务器模式(Server Mode):使用服务器模式和内嵌模式一样,只不过它可以跑在另一个进程里。
    3. 混合模式:
      第一个应用以内嵌模式启动它,对于后面的应用来说它是服务器模式跑着的。混合模式是内嵌模式和服务器模式的组合。第一个应用通过内嵌模式与数据库建立连接,同时也作为一个服务器启动,于是另外的应用(运行在不同的进程或是虚拟机上)可以同时访问同样的数据。第一个应用的本地连接与嵌入式模式的连接性能一样的快,而其它连接理论上会略慢。

    连接方式

    1. 以嵌入式(本地)连接方式连接H2数据库

      这种连接方式默认情况下只允许有一个客户端连接到H2数据库,有客户端连接到H2数据库之后,此时数据库文件就会被锁定,那么其他客户端就无法再连接了。

      连接语法:jdbc:h2:[file:][<path>]<databaseName>

      例如:

      • jdbc:h2:~/test    // 连接位于用户目录下的test数据库
      • jdbc:h2:file:/data/sample
      • jdbc:h2:file:E:/H2/gacl // Windows only
    2. 使用TCP/IP的服务器模式(远程连接)方式连接H2数据库(推荐)

      这种连接方式就和其他数据库类似了,是基于Service的形式进行连接的,因此允许多个客户端同时连接到H2数据库。

      连接语法:jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>

      范例:jdbc:h2:tcp://localhost/~/test

    3. H2数据库的内存模式

      连接语法:jdbc:h2:mem:<databaseName>

      • H2数据库被称为内存数据库,因为它支持在内存中创建数据库和表。
      • 注意:如果使用H2数据库的内存模式,那么我们创建的数据库和表都只是保存在内存中,一旦服务器重启,那么内存中的数据库和表就不存在了。

    可选配置

    在用户目录下新建 .h2.server.properties,支持如下属性配置:

    • webAllowOthers: 是否允许远程连接,默认 false。
    • webPort: h2 端口,默认为 8082。
    • webSSL: 是否启用 SSL 加密连接,默认 false。
    • webAdminPassword: 超级管理员密码。

    超级管理员密码进入如下页面需要:

    在这里插入图片描述

    如果没有手动配置此文件,以 web-server 方式首次启动 H2 后,点击打开的浏览器页面的 Save 按钮后就会自动创建一个。

    .h2.server.properties 文件范例:

    #H2 Server Properties
    #Wed Jul 01 23:00:28 CST 2020
    0=Generic JNDI Data Source|javax.naming.InitialContext|java:comp/env/jdbc/Test|sa
    1=Generic Teradata|com.teradata.jdbc.TeraDriver|jdbc:teradata://whomooz/|
    10=Generic DB2|com.ibm.db2.jcc.DB2Driver|jdbc:db2://localhost/test|
    11=Generic Oracle|oracle.jdbc.driver.OracleDriver|jdbc:oracle:thin:@localhost:1521:XE|sa
    12=Generic MS SQL Server 2000|com.microsoft.jdbc.sqlserver.SQLServerDriver|jdbc:microsoft:sqlserver://localhost:1433;DatabaseName=sqlexpress|sa
    13=Generic MS SQL Server 2005|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc:sqlserver://localhost;DatabaseName=test|sa
    14=Generic PostgreSQL|org.postgresql.Driver|jdbc:postgresql:test|
    15=Generic MySQL|com.mysql.jdbc.Driver|jdbc:mysql://localhost:3306/test|
    16=Generic HSQLDB|org.hsqldb.jdbcDriver|jdbc:hsqldb:test;hsqldb.default_table_type=cached|sa
    17=Generic Derby (Server)|org.apache.derby.jdbc.ClientDriver|jdbc:derby://localhost:1527/test;create=true|sa
    18=Generic Derby (Embedded)|org.apache.derby.jdbc.EmbeddedDriver|jdbc:derby:test;create=true|sa
    19=Generic H2 (Server)|org.h2.Driver|jdbc:h2:tcp://localhost/~/test|sa
    2=Generic Snowflake|com.snowflake.client.jdbc.SnowflakeDriver|jdbc:snowflake://accountName.snowflakecomputing.com|
    20=Generic H2 (Embedded)|org.h2.Driver|jdbc:h2:~/test|root
    3=Generic Redshift|com.amazon.redshift.jdbc42.Driver|jdbc:redshift://endpoint:5439/database|
    4=Generic Impala|org.cloudera.impala.jdbc41.Driver|jdbc:impala://clustername:21050/default|
    5=Generic Hive 2|org.apache.hive.jdbc.HiveDriver|jdbc:hive2://clustername:10000/default|
    6=Generic Hive|org.apache.hadoop.hive.jdbc.HiveDriver|jdbc:hive://clustername:10000/default|
    7=Generic Azure SQL|com.microsoft.sqlserver.jdbc.SQLServerDriver|jdbc:sqlserver://name.database.windows.net:1433|
    8=Generic Firebird Server|org.firebirdsql.jdbc.FBDriver|jdbc:firebirdsql:localhost:c:/temp/firebird/test|sysdba
    9=Generic SQLite|org.sqlite.JDBC|jdbc:sqlite:test|sa
    webAllowOthers=false
    webPort=8082
    webSSL=false
    webAdminPassword=111111
    

    注:在 H2 Control 每次构建的数据库连接保存后都会作为历史配置项自动保存到 .h2.server.properties 文件内,一行一个链接配置,格式为 <number>=<name>|<driver>|<url>|<user>
    上述编号 0~20 的连接配置是 H2 默认提供的,编号 21 是我自行创建保存的,连接的密码因安全性不会保存下来。

    spring boot2.x中集成H2数据库

    添加依赖:

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <scope>runtime</scope>
    </dependency>
    

    配置如下:

    spring.jpa.database=h2
    spring.jpa.show-sql=true
    # ddl执行方式,update create 等
    spring.jpa.hibernate.ddl-auto=update
    
    
    spring.datasource.platform=h2  #表明使用的数据库平台是h2
    spring.datasource.url=jdbc:h2:./data/test;AUTO_SERVER=TRUE
    spring.datasource.username=sa
    spring.datasource.password=123456
    spring.datasource.driverClassName=org.h2.Driver
    
    # 进行该配置后,h2 web consloe就可以在远程访问了。否则只能在本机访问。
    spring.h2.console.settings.web-allow-others=true  
    # 进行该配置,你就可以通过YOUR_URL/h2访问h2 web consloe。YOUR_URL是你程序的访问URl。
    spring.h2.console.path=/h2-consloe
    # 进行该配置,程序开启时就会启动h2 web consloe。当然这是默认的,如果你不想在启动程序时启动h2 web consloe,那么就设置为false。
    spring.h2.console.enabled=true  
    

    FilePath的格式说明:

    • ./{path}/{fileName} 在当前程序的根目录下创建目录和数据库文件

    • ~/{path}/{fileName} 在当前用户的根目录下创建目录和数据库文件(windows即用户目录,Linux即home目录)

    • C:/{path}/{fileName} 在指定盘符的指定目录下创建数据库文件

    附加参数:

    • AUTO_SERVER=TRUE 启动自动混合模式,允许开启多个连接,该参数不支持在内存中运行模式

    • DB_CLOSE_ON_EXIT=FALSE,当虚拟机退出时并不关闭数据库

    • MODE=MYSQL 兼容MySQL

    更多URL格式和示例可以看这篇博客最下面:H2数据库使用简介

    使用和MySQL没啥区别,MyBatis,Hibernate以前怎么用,现在还怎么用,主要就是配置。

    错误信息查看

    上面已经提到过,类似 test.trace.db 这样的文件,就是H2的错误信息,我们打开看看:

    在这里插入图片描述

    我们主要去找 [*] 这个符号和后面的错误码,然后对照着官方的错误码说明看,就知道哪里报错了。

    我们看看[42001-200]这个错误码,前面的 42001 是错误码,后面的 200 的 h2 的版本

    在这里插入图片描述

    大概意思就是:尝试执行无效的SQL语句时引发代码42001的错误,原因就是 H2 不支持
    MySQLENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8 这些设置,创建表的时候去掉就好了。

    其他


    作者:不敲代码的攻城狮
    出处:https://www.cnblogs.com/leigq/
    任何傻瓜都能写出计算机可以理解的代码。好的程序员能写出人能读懂的代码。

     
  • 相关阅读:
    Material和SharedMaterial的区别
    unity 字典序列化的问题
    序列化到本地
    数据分离
    太久没更 重回博客园
    Unity下替换模型后 之前生成的Prefab中的原模型脚本不会丢失
    Enum.Parse
    Assert断言机制
    20170612
    Unity Cookie
  • 原文地址:https://www.cnblogs.com/leigq/p/13406500.html
Copyright © 2011-2022 走看看