H2是一个用Java开发的嵌入式数据库,这里指的嵌入式不是手持设备之类的,而是H2数据库作为一个类库,直接嵌入到上层的应用程序中,与应用运行在同一个进程中。 最大的优势在于可以同应用程序打包在一起发布,对于客户端应用来说,非常方便。比如说腾讯QQ或者
H2是一个用Java开发的嵌入式数据库,这里指的嵌入式不是手持设备之类的,而是H2数据库作为一个类库,直接嵌入到上层的应用程序中,与应用运行在同一个进程中。
最大的优势在于可以同应用程序打包在一起发布,对于客户端应用来说,非常方便。比如说腾讯QQ或者Mozilla Firefox,用户不可能为了用个软件还得在自己机器上装个MySQL?SQL Server?上述软件就使用嵌入式数据库SQLite来进行客户端本地存储。H2的定位和SQLite一样,属于嵌入式数据库。(H2也可以用在Android上哦)
另一个优势是,写代码时需要写单元测试,与数据库操作相关的功能单元测试都比较不好做,因为有一个环境的问题,而采用H2来进行就要比MySQL要方便的多,首先是启动速度快,而且可以关闭持久化功能,表只存在内存中,每一个用例执行完自动还原到纯净环境。
现在很多开源产品的发布版中所附的测试用例,都是用的H2,目前大家都是把它用作测试。我感觉它的另一个用处是作为内存缓存,NoSQL的一个补充,当某些场景下数据模型必须为关系型,可以拿它当Memcached使,作为后端MySQL/Oracle的一个缓冲层,缓存一些不经常变化但需要频繁访问的数据,比如字典表、权限表。
H2使用非常简单,使用URL:?jdbc:h2:~/test 来建立JDBC连接,就会自动创建一个test.h2.db文件和一个test.lock.db文件,前者就是用来存储数据的。只要这个Connection不断开,H2就始终处于运行状态。
H2支持3种运行模式:
1.嵌入式模式。H2运行在应用程序的进程中,执行效率会比较高,但由于不允许其他进程访问,管理起来麻烦点。
2.服务器模式。类似于MySQL那种C/S模型,H2运行在一个独立的进程中,应用程序通过TCP协议与其远程通信。优势就是管理方便,而且可以部署在不同的机器上,使用包括集群等特性。
3.混合模式。综合以上两种情况,由应用程序首先启动H2,这时对于应用来说H2工作在嵌入式模式,同时H2监听TCP某个端口,等待远程连接,这就是服务器模式,便于管理维护。
通常来说,混合模式比较实用。使用jdbc:h2:~/test;AUTO_SERVER=TRUE来建立JDBC连接,就可以开启混合模式。
还可以关闭持久化功能,所有数据都保存在内存中,效率很高。URL:jdbc:h2:mem:test ,同样可以开启混合模式允许远程访问。
对于多版本并发,默认的实现是基于表锁的,读操作加共享锁,写操作加互斥锁,(也就是写会阻塞读)等待锁超时会抛出异常。可以开启MVCC (Multi-Version Concurrent Control) 多版本并发控制模式,URL为jdbc:h2:~/test;MVCC=TRUE,开启MVCC模式后,所有操作都基于行锁,只能看到已提交的数据,写不阻塞读。
举个例子来说明下这个问题:
// 事务1 Connection conn1 = DriverManager.getConnection(jdbcUrl, user, passwd); conn1.setAutoCommit(false); // 开启事务 ResultSet rs1 = conn1.createStatement().executeQuery( "select name from students where id = 1 limit 1"); // 事务中读 if (rs1.next()) System.out.println("1. " + rs1.getString("name")); // 修改前 conn1.createStatement().execute( "update students set name = 'lisi' where id = 1"); // 写操作 注意!完成后故意不提交 ResultSet rs2 = conn1.createStatement().executeQuery( "select name from students where id = 1 limit 1"); // 事务中读 if (rs2.next()) System.out.println("2. " + rs2.getString("name")); // 修改后 // 事务2 Connection conn2 = DriverManager.getConnection(jdbcUrl, user, passwd); conn2.setAutoCommit(false); // 开启事务 ResultSet rs3 = conn2.createStatement().executeQuery( "select name from students where id = 1"); // 事务外读 if (rs3.next()) System.out.println("3. " + rs3.getString("name")); // ?
这个实验的流程是这样的:首先开启一个事务1,读取初始值,修改它,再重新读取这个值。保持事务1没有提交的情况下,在事务2中读取这个值。
如果使用默认模式,则是基于表锁,写阻塞读,事务1的3个操作顺利完成,但事务1没有提交,写锁没有释放。这个时候事务2中会读取这个值,发现数据被锁了,等待一小会后发现仍然无法获取锁,于是第24行抛出异常,控制台打印信息如下:
1. zhangsan 2. lisi Exception in thread "main" org.h2.jdbc.JdbcSQLException: Timeout trying to lock table "STUDENTS"; SQL statement: select name from students where id = 1 [50200-157]
如果开启了MVCC模式,写操作就不会阻塞读操作了,任何时间点只能读到已提交数据。第24行代码正常执行,因为事务1没有提交,所以只能读取到事务1修改前的值,控制台打印信息如下:
1. zhangsan 2. lisi 3. zhangsan
如果应用有并发请求的话,建议开启MVCC模式。
原文地址:H2介绍 – Java嵌入式数据库, 感谢原作者分享。

wapi这个名词用户们可能在使用网络得时候见到过,但是对于一部分人来说肯定都不知道wapi是什么,下面就带来了详细介绍,帮助不知道小伙伴去了解。wapi是什么东西:答:wapi是无线局域网鉴别和保密的基础结构。这就像红外线和蓝牙等功能一样,一般都覆盖在办公楼等地方的附近。基本都是为一个小部门所有的,所以这个功能涉及的范围只有几公里。wapi相关介绍:1、wapi是无线局域网里面的一种传输协议。2、这款技术是可以去避免窄频带通信的问题,可以更好的去进行传播。3、仅仅只需要一个代码就可以去传送信号了

pubg又称绝地求生,是一款非常经典的射击大逃杀类型游戏,从2016年火爆以来一直拥有非常多的玩家。在最近的win11系统推出后,就有不少玩家想要在win11上游玩它,下面就跟着小编来看看win11是否可以玩pubg吧。win11能玩pubg吗:答:win11可以玩pubg。1、在win11推出之初,因为win11需要开启tpm的缘故,所以导致很多玩家被pubg封号处理了。2、不过后来根据玩家的反馈,蓝洞方面已经解决了这个问题,目前已经可以在win11中正常玩pubg了。3、如果大家遇到了pub

Python函数介绍:exec函数的介绍及示例引言:在Python中,exec是一种内置函数,它用于执行存储在字符串或文件中的Python代码。exec函数提供了一种动态执行代码的方式,使得程序可以在运行时根据需要生成、修改和执行代码。本文将介绍exec函数的使用方法,并给出一些实际的代码示例。exec函数的使用方法:exec函数的基本语法如下所示:exec

i5是英特尔旗下的一系列处理器,拥有到现在11代i5的各种不同版本,每一代都有着不同性能。因此对于i5处理器是否能够安装win11,还需要看是第几代的处理器,下面就跟着小编一起来分别了解一下吧。i5处理器能装win11吗:答:i5处理器能装win11。一、第八代及之后的i51、第八代及后续的i5处理器是能够满足微软的最低配置需求的。2、因此我们只需要进入微软网站,下载一个“win11安装助手”3、下载完成后,运行该安装助手,根据提示进行操作就可以安装win11了。二、第八代之前的i51、第八代之

在如今快捷的生活,为了提高工作效率,快捷键是必不可少的工作需求。快捷键是指按键或按键组合,可提供另一种方式来执行通常使用鼠标执行的操作。那么edge快捷键有哪些呢?edge快捷键的功能又有哪些呢?下面小编整理了一份edge快捷键的介绍,感兴趣的朋友们快来看看吧!Ctrl+D:将当前页面添加到收藏夹或阅读列表Ctrl+E:在地址栏中执行搜索查询Ctrl+F:在页面上查找Ctrl+H:打开历史记录面板Ctrl+G:打开阅读列表面板Ctrl+I:打开收藏夹列表面板(测试好像不起作用)Ctrl+J:打开

很多用户在电脑上安装了打印机驱动程序,但却不知道如何找到它们。因此,今天我为大家带来了详细介绍打印机驱动程序在电脑中的位置,对于还不了解的用户,快来看看吧打印机驱动在电脑哪里找重新撰写内容而不改变原义时,需要将语言改写为中文,不需要出现原句首先,建议使用第三方软件进行搜索2、在右上角找到"工具箱"3、在下方找到并点击“设备管理器”。改写后的句子:3、在底部找到并点击“设备管理器”4、然后打开“打印队列”,然后找到你的打印机设备。此次是你的打印机名称型号。5、右键打印机设备,就能够去更新或者卸载我

在微软公司发布了win10系统之后,我们所知的就有好几种版本:家庭版、教育版、专业版、旗舰版等等。小编认为这些版本在性能上没什么差别,只是有些针对性的功能不同。那么小编今天就来跟大家聊一聊玩游戏用win10哪个版本最好吧~希望可以帮助到你。玩游戏用win10哪个版本最好答:玩游戏来说,这几个版本其实区别并不大。如果只是想要拿来打游戏的话,推荐win10家庭版。因为家庭版没有其他花里胡哨的功能,能够让性能主要集中在游戏方面。这个问题,首先要说的就是win10几个版本之间的区别。1、win10主要版

Python函数介绍:zip函数的介绍及示例Python是一种高级语言,它提供了许多有用的函数来帮助开发人员快速地编写程序。其中一个函数就是zip函数。Zip函数是Python中的内置函数之一,它可以接受一组可迭代对象(包括列表、元组、集合和字典等),并返回一个由这些可迭代对象中的元素按顺序成对组成的元组。Zip函数可以用于多种情况,例如:1.将两个列表的元


热AI工具

Undresser.AI Undress
人工智能驱动的应用程序,用于创建逼真的裸体照片

AI Clothes Remover
用于从照片中去除衣服的在线人工智能工具。

Undress AI Tool
免费脱衣服图片

Clothoff.io
AI脱衣机

AI Hentai Generator
免费生成ai无尽的。

热门文章

热工具

PhpStorm Mac 版本
最新(2018.2.1 )专业的PHP集成开发工具

安全考试浏览器
Safe Exam Browser是一个安全的浏览器环境,用于安全地进行在线考试。该软件将任何计算机变成一个安全的工作站。它控制对任何实用工具的访问,并防止学生使用未经授权的资源。

SublimeText3 英文版
推荐:为Win版本,支持代码提示!

Dreamweaver CS6
视觉化网页开发工具

SublimeText3 Mac版
神级代码编辑软件(SublimeText3)