h2数据库教程_NoSQL数据库入门

h2数据库教程_NoSQL数据库入门范培忠2017-06-19  H2是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。  H2最大的用途在于可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据。  它的另一个用途是用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态。  H2的第三个用处是作为缓存,作为NoSQL的一个补充。当某

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE稳定放心使用

范培忠 2017-06-19

  H2是一个用Java开发的嵌入式数据库,它本身只是一个类库,可以直接嵌入到应用项目中。
  H2最大的用途在于可以同应用程序打包在一起发布,这样可以非常方便地存储少量结构化数据。
  它的另一个用途是用于单元测试。启动速度快,而且可以关闭持久化功能,每一个用例执行完随即还原到初始状态。
  H2的第三个用处是作为缓存,作为NoSQL的一个补充。当某些场景下数据模型必须为关系型,可以拿它当Memcached使,作为后端MySQL/Oracle的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据,比如字典表、权限表。不过这样系统架构就会比较复杂了。

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

二、下载和安装
(一)下载
  H2数据库下载地址:
http://www.h2database.com/html/download.html
h2数据库教程_NoSQL数据库入门


  聪明如你肯定会选第二个。Windows、Linux下都可以直接解压缩就用,符合永远中二中年开发者的使用习惯。
(二)解压缩后的目录结构:
  h2
  |—bin
  |    |—h2-1.1.116.jar   //H2数据库的jar包(驱动也在里面)
  |    |—h2.bat              //Windows控制台启动脚本
  |    |—h2.sh                  //Linux控制台启动脚本
  |    |—h2w.bat              //Windows控制台启动脚本(不带黑屏窗口)
  |—docs                       //H2数据库的帮助文档(内有H2数据库的使用手册)
  |—service //通过wrapper包装成服务。
  |—src //H2数据库的源代码
  |—build.bat //windows构建脚本
  |—build.sh //linux构建脚本

  此时就算“安装”完成了。

三、运行模式与运行方式
(一)运行模式
  H2有三种运行模式。
  1、内嵌模式(Embedded Mode)
  内嵌模式下,应用和数据库同在一个JVM中,通过JDBC进行连接。 可持久化,但同时只能一个客户端连接。内嵌模式性能会比较好。
h2数据库教程_NoSQL数据库入门

  2、服务器模式(Server Mode)
  使用服务器模式和内嵌模式一样,只不过它可以跑在另一个进程里。
h2数据库教程_NoSQL数据库入门

  3、 混合模式
  第一个应用以内嵌模式启动它,对于后面的应用来说它是服务器模式跑着的。混合模式是内嵌模式和服务器模式的组合。第一个应用通过内嵌模式与数据库建立连接,同时也作为一个服务器启动,于是另外的应用(运行在不同的进程或是虚拟机上)可以同时访问同样的数据。第一个应用的本地连接与嵌入式模式的连接性能一样的快,而其它连接理论上会略慢。 
h2数据库教程_NoSQL数据库入门

(二)运行方式
  开发中肯定是Server Mode方便,因为需要用工具管理数据。所以
进入H2的bin目录。
h2数据库教程_NoSQL数据库入门

  如果你在Win环境可以运行h2.bat或h2w.bat。区别只是后者是后台静默运行。
h2数据库教程_NoSQL数据库入门

  如果你在Linux环境,可运行./h2.sh文件欢快地跑起来数据库服务。但其实不建议酱紫,因为这样有诸多不便。可如下修改:
  1. 复制h2.sh为h2_server.sh文件;
h2数据库教程_NoSQL数据库入门

  1. 编辑h2_server.sh,如下#!/bin/shdir=$(dirname$0)java -cp $dir/h2-1.3.176.jar:$H2DRIVERS:$CLASSPATH org.h2.tools.Server -tcpAllowOthers -webAllowOthers -webPort 8082$@
  2. 说明: 
  org.h2.tools.Server: 以服务器模式启动 
  -tcpAllowOthers: 允许远程机器通过TCP方式访问 
  -webAllowOthers: 允许远程机器通过浏览器访问 
  -webPort 8082: 默认的访问端口(8082为未被占用的端口,如果此端口已经被其他端口占用,则改为其他端口)
  1. 具体的运行方式
  ①chmod修改文件权限;
  ②输入nohup ./h2_server.sh &回车。这样可以后台运行;

四、远程管理
  1. 通过远程浏览器来访问h2 
  访问地址:http://服务器ip:8082/ ,出现如下页面:
h2数据库教程_NoSQL数据库入门

  2.路径的配置
  jdbc:h2:tcp://localhost//usr/h2/data/rlib 是H2的路径。tcp代表使用tcp方式访问。localhost/是IP。因为例子是在Linux下,数据库的文件路径是“/usr/h2/data/rlib”,所以localhost/后面还有个/。详细的URL设置可见本文附录。(聪明如你,可能会问为什么既然H2远程部署在Linux下但使用浏览器访问IP还填写localhost?就不告诉你)
  User name : sa是h2默认的用户,密码可空。但作为永远中二随性的中年开发者,好歹设置下密码,尤其当你的H2部署在公网时。不然会被无聊人把数据删到汗裤都不剩。

  3.点击如图Test connect按钮测试连接。此时如果数据库文件本身不存在则会自动创建。数据库文件自动生成到/usr/h2/data/目录下,名为rlib.mv.db。点击Connect,进入管理终端。
h2数据库教程_NoSQL数据库入门

  H2的管理终端做得很不错的。按Ctrl+Enter执行输入区的SQL,按Shift+Enter执行当前选中的SQL。

五、数据备份恢复
  不能备份和导入数据的数据库是跛脚的。可通过自带的CSVWRITE方法导出为csv格式文件,也可通过CSVREAD 导入数据。
  (一)导出函数CSVWRITE
h2数据库教程_NoSQL数据库入门

  例子:CALL CSVWRITE(‘test2.csv’, ‘SELECT * FROM TEST’, ‘charset=UTF-8 fieldSeparator=|’);
  
注意:导出时就算加上编码,导出后的文件用VIM、Editplus查看是正常,但用Excel查看也仍然会是乱码的。需要用Editplus另存为Unicode,就好了。
  (二)导入函数CSVWRITE
  语法:
CSVREAD(
fileNameString
[,
columnsString
[,
csvOptions
] ] )
  例子①:
导入数据:
INSERT INTO TEST ( SELECT * FROM CSVREAD(‘d:/test.csv ‘)) ;
  例子②:
导入结构及数据,
根据csv文件创建h2数据表。
  //csv文件数据创建test表
  CREATE TABLE TEST AS SELECT * FROM CS VREAD(‘d:/test.csv ‘);
  //创建test表,csv文件相应的列插入到test表相应的字段
  CREATE TABLE TEST(ID INT PRIMARY KEY, NAME VARCHAR(255)) AS SELECT * FROM CSVREAD(‘d:/test.csv ‘);
  (三)csvOptions
h2数据库教程_NoSQL数据库入门

六、应用程序开发
  终于到了开发使用环节了。H2数据库的开发非常简单,和MySQL等没有太大区别。
  (一)加入Maven依赖
<
dependency
>

<
groupId
>
com.h2database
</
groupId
>

<
artifactId
>
h2
</
artifactId
>

<
version
>
1.4.195
</
version
>
</
dependency
>
  (二)创建db.properties
driverClassName
=
org.h2.Driver
#此处的写法是使用嵌入模式链接H2库,紧接着那行是使用Server Mode用tcp连接。区别一个是前者性能更好,后者可同时多个客户端连接
url
=
jdbc:h2:D:/test
#url=jdbc:h2:tcp://1localhost//usr/h2/data/rlib
username
=
sa
password
=

PS:在使用嵌入模式链接H2库时,使用管理页面连接会报错如下:
h2数据库教程_NoSQL数据库入门

  (三)使用如上db.properties即可使用H2数据库进行开发。具体的数据库操作等不属于H2范畴,可自行参考其它资料。


附录:H2数据库不同模式连接字串
  URL Format and Examples
Embedded (local) connection jdbc:h2:[file:][<path>]<databaseName>
jdbc:h2:~/test
jdbc:h2:file:/data/sample
jdbc:h2:file:C:/data/sample (Windows only)
In-memory (private) jdbc:h2:mem:
In-memory (named) jdbc:h2:mem:<databaseName>
jdbc:h2:mem:test_mem
Server mode (remote connections) using TCP/IP jdbc:h2:tcp://<server>[:<port>]/[<path>]<databaseName>
jdbc:h2:tcp://localhost/~/test
jdbc:h2:tcp://dbserv:8084/~/sample
jdbc:h2:tcp://localhost/mem:test
Server mode (remote connections) using TLS jdbc:h2:ssl://<server>[:<port>]/<databaseName>
jdbc:h2:ssl://localhost:8085/~/sample;
Using encrypted files jdbc:h2:<url>;CIPHER=AES
jdbc:h2:ssl://localhost/~/test;CIPHER=AES
jdbc:h2:file:~/secure;CIPHER=AES
File locking methods jdbc:h2:<url>;FILE_LOCK={FILE|SOCKET|NO}
jdbc:h2:file:~/private;CIPHER=AES;FILE_LOCK=SOCKET
Only open if it already exists jdbc:h2:<url>;IFEXISTS=TRUE
jdbc:h2:file:~/sample;IFEXISTS=TRUE
Don’t close the database when the VM exits jdbc:h2:<url>;DB_CLOSE_ON_EXIT=FALSE
Execute SQL on connection jdbc:h2:<url>;INIT=RUNSCRIPT FROM ‘~/create.sql’
jdbc:h2:file:~/sample;INIT=RUNSCRIPT FROM ‘~/create.sql’\;RUNSCRIPT FROM ‘~/populate.sql’
User name and/or password jdbc:h2:<url>[;USER=<username>][;PASSWORD=<value>]
jdbc:h2:file:~/sample;USER=sa;PASSWORD=123
Debug trace settings jdbc:h2:<url>;TRACE_LEVEL_FILE=<level 0..3>
jdbc:h2:file:~/sample;TRACE_LEVEL_FILE=3
Ignore unknown settings jdbc:h2:<url>;IGNORE_UNKNOWN_SETTINGS=TRUE
Custom file access mode jdbc:h2:<url>;ACCESS_MODE_DATA=rws
Database in a zip file jdbc:h2:zip:<zipFileName>!/<databaseName>
jdbc:h2:zip:~/db.zip!/test
Compatibility mode jdbc:h2:<url>;MODE=<databaseType>
jdbc:h2:~/test;MODE=MYSQL
Auto-reconnect jdbc:h2:<url>;AUTO_RECONNECT=TRUE
jdbc:h2:tcp://localhost/~/test;AUTO_RECONNECT=TRUE
Automatic mixed mode jdbc:h2:<url>;AUTO_SERVER=TRUE
jdbc:h2:~/test;AUTO_SERVER=TRUE
Page size jdbc:h2:<url>;PAGE_SIZE=512
Changing other settings jdbc:h2:<url>;<setting>=<value>[;<setting>=<value>…]
jdbc:h2:file:~/sample;TRACE_LEVEL_SYSTEM_OUT=3

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/182651.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • 2020低压电工模拟考试及低压电工实操考试视频

    2020低压电工模拟考试及低压电工实操考试视频题库来源:安全生产模拟考试一点通公众号小程序2020低压电工模拟考试及低压电工实操考试视频,包含低压电工模拟考试答案解析及低压电工实操考试视频练习。由安全生产模拟考试一点通公众号结合国家低压电工考试最新大纲及低压电工考试真题出具,有助于低压电工考试试题考前练习。1、【判断题】特种作业人员未经专门的安全作业培训,未取得相应资格,上岗作业导致事故的,应追究生产经营单位有关人员的责任。(√)2、【判断题】正弦交流电的周期与角频率的关系互为倒数的。(×)3、【判断题】遮栏是为防止…

    2022年6月17日
    29
  • php header utf8 插入header(“Content-type: text/html; charset=utf-8”);「建议收藏」

    php header utf8 插入header(“Content-type: text/html; charset=utf-8”);「建议收藏」phpheaderutf8插入header(‘Content-type:text/html;charset=utf-8’);

    2022年6月30日
    27
  • Laravel 7 新版本发布,新功能及更改

    Laravel 7 新版本发布,新功能及更改

    2022年2月15日
    43
  • 火眼金睛审核 一键轻松处理[通俗易懂]

    火眼金睛审核 一键轻松处理——学籍助手简介学籍助手是专为河北省义务教育学籍管理系统区县端开发的一款辅助工具(图)。该工具不影响原系统正常使用,只是扩充了一些实用功能,只是让学籍管理变得异常轻松简单(如您不是区县学籍管理员,请勿下载)。学籍助手具有严格的入库审核、强大的批量处理和轻松的数据对接功能,犹如为原学籍管理系统赋予一双慧眼、插上一对翅膀,从容处理繁杂的学籍变…

    2022年4月13日
    51
  • 转罗马字符_罗马字符是什么意思

    转罗马字符_罗马字符是什么意思publicclassNumToRoman{publicstaticstringToRomanNum(intpNum){string[,]a=newstring[3,10]{{“”,”I”,”II”,”III”,”IV”,”V”,”VI”,”VII”,”VIII”,

    2022年9月29日
    4
  • echarts 旭日图_ECHARTS

    echarts 旭日图_ECHARTS旭日图旭日图(Sunburst)由多层的环形图组成,在数据结构上,内圈是外圈的父节点。因此,它既能像饼图一样表现局部和整体的占比,又能像矩形树图一样表现层级关系。引入相关文件旭日图是ECharts4.0新增的图表类型,需要引入完整版的echarts.min.js最简单的旭日图创建旭日图需要在series配置项中声明类型为‘sunburst’的系列,并且以树形结构声明其d…

    2022年9月26日
    4

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号