问题标签 [h2]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3506 浏览

clustered-index - H2数据库:聚集索引支持

我将 H2 数据库用于包含大量时间序列的环境数据。时间序列只是定期(例如每小时一次)记录在数据库中的传感器的测量值。

表中存储的数据:

我想对表进行范围查询,例如:

为了提高性能,我想在 dt 列上构建聚集索引,但问题是,我还没有发现 H2 是否支持聚集索引。有人知道H2 是否支持 聚集索引?

0 投票
3 回答
46420 浏览

sql - 如果不存在则创建视图?

有什么办法可以create view if not exists在 MySQL 或 H2 数据库中使用?

0 投票
2 回答
12151 浏览

android - Android 上的 H2 数据库与 SQLite

由于Android 中的嵌入式 SQLite 数据库缺乏 Unicode 支持

我最感兴趣的是H2 数据库与 Android SQLite的性能和稳定性

你们在用吗?我应该知道任何 H2 数据库的缺点吗?

0 投票
2 回答
2718 浏览

java - 如何让 H2 与 Spring 一起使用?

我正在编写一个扩展 Spring 的测试AbstractTransactionalJUnit4SpringContextTests

在我的应用程序代码中,我有一个在测试中调用的方法,并带有以下注释:

问题

H2我在使用内存模式作为底层数据源时遇到了问题。它给了我错误:

Caused by:org.h2.jdbc.JdbcSQLException : Timeout trying to lock tableMY_TABLE[50200-131]

当我删除传播时,它可以工作,当我使用 Oracle 或 MySQL 等替代数据库时Propagation.REQUIRES_NEW,一切正常。

我正在使用 Spring3.0.2-RELEASEH2 1.2.131.

我怎样才能开始H2使用 Spring?

0 投票
3 回答
9099 浏览

java - 不知道它的名称的 Liquibase 丢弃约束

我们使用 liquibase 来跟踪我们的数据库更改。第一个 changeSet 包含这些行:

基本上,这意味着 SHORT_ID 列具有唯一约束,但该约束的名称可以是任何名称,并且每次通常都不同(我们针对 H2 数据库运行一些集成测试,并且每次运行测试时都会创建新的基础)

所以.. 问题是:我无法更改第一个 changeSet 但现在我们必须摆脱这个独特的约束。有什么想法可以通过使用 liquibase 来实现吗?

0 投票
4 回答
24365 浏览

java - 从 Oracle 实例创建内存数据库结构

我有一个应用程序,其中许多“单元”测试在执行期间使用与 Oracle 数据库的真实连接。

可以想象,执行这些测试需要花费太多时间,因为它们需要初始化一些 Spring 上下文,并与 Oracle 实例通信。除此之外,我们必须管理复杂的机制,例如事务,以避免在测试执行后修改数据库(即使我们使用类似 Spring 的有用类AbstractAnnotationAwareTransactionalTests)。

所以我的想法是用内存数据库逐步替换这个 Oracle 测试实例。我会使用hsqldb或者更好h2

我的问题是知道什么是最好的方法来做到这一点。我主要关心的是内存数据库结构的构建和参考数据的插入。

当然,我可以从 Oracle 中提取数据库结构,使用SQL Developeror之类的工具TOAD,然后修改这些脚本以使其适应hsqldborh2语言。但我认为这不是更好的方法。


事实上,我已经在另一个项目中使用hsqldb.,但我已经手动编写了所有脚本来创建表。幸运的是,我只需要创建几张表。在此步骤中,我的主要问题是将用于创建表的 Oracle 脚本“翻译”成该hsqldb语言。

例如,使用以下 sql 命令在 Oracle 中创建的表:

需要“翻译”为hsqldb

在我当前的项目中,有太多表无法手动执行...


所以我的问题:

  • 你可以给我什么建议来实现这一目标?
  • 是否提供h2hsqldb提供一些工具来从 Oracle 连接生成脚本?

技术信息

Java 1.6、Spring 2.5、Oracle 10.g、Maven 2


编辑

关于我的单元测试的一些信息:

在我使用的应用程序中hsqldb,我进行了以下测试: - 一些与 DB 无关的“基本”单元测试。- 对于 DAO 测试,我曾经hsqldb执行数据库操作,例如 CRUD。- 然后,在服务层,我曾经Mockito模拟我的 DAO 对象,以便专注于服务测试而不是整个应用程序(即服务 + dao + DB)。

在我当前的应用程序中,我们遇到了最糟糕的情况:DAO 层测试需要运行 Oracle 连接。服务层不使用(还)任何模拟对象来模拟 DAO。因此服务测试需要 Oracle 连接。

我知道模拟和内存数据库是两个不同的点,我会尽快解决它们。但是,我的第一步是尝试通过内存数据库删除 Oracle 连接,然后我将利用我的Mockito知识来增强测试。

请注意,我还想将单元测试与集成测试分开。后者需要访问 Oracle 数据库,才能执行“真正的”测试,但我主要担心(这就是这个问题的目的)是我今天几乎所有的单元测试都不是孤立运行的。

0 投票
1 回答
6496 浏览

sql - H2 数据库:INFORMATION_SCHEMA 中有关主键的信息

我在 H2 中创建下表:

然后我查看 INFORMATION_SCHEMA.TABLES 表:

结果:

然后我查看 INFORMATION_SCHEMA.CONSTRAINTS 表:

结果:

这些语句不是我所说的,因此,问题是:TABLES 和 CONSTRAINS 中的信息是否反映了在数据库中执行的真实 SQL?

  1. 在原始 CREATE TABLE 语句中没有CACHED字。(不是问题)
  2. 我从未执行过ALTER TABLE .. ADD CONSTRAINT语句。

我问这个问题的实际原因是我不确定应该执行哪个语句来保证在聚集索引中使用主键。如果您查看我之前的问题H2 数据库:聚集索引支持,那么您可能会在 Thomas Mueller 的回答中找到以下语句:

如果在创建表之后创建主键,则主键存储在新的索引 b-tree 中。

因此,如果语句按照它们显示在 INFORMATION_SCHEMA 中的方式执行,则在创建表后创建主键,因此在聚集索引中不使用 ID(基本上作为数据 b 树中的键)。

有没有一种方法可以保证在 H2 的聚集索引中使用主键?

0 投票
2 回答
2862 浏览

performance - H2 数据存储非常慢?(不是真的!见编辑)

我刚刚测试了 H2 数据存储(使用 Datanucleus 2.x)

性能非常缓慢。Postgres 的 1/3 和 MySQL 的 1/10(大约)

我对“规格”感到非常满意,但我无法在“实际使用”中看到它们。 http://www.h2database.com/html/performance.html

是否有任何我可能缺少的性能调整?

编辑:

H2 不慢。是迄今为止我测试过的最快的 RDBMS 之一!

我需要帮助解释为什么我需要使用 WEB MANAGER(H2 控制台)连接到数据库以获得这个数据库引擎的惊人速度......我在通过 H2 WEB 控制台连接时不小心测试了我的应用程序“等等”,问题解决了。

为什么?

0 投票
2 回答
1780 浏览

hibernate - 如何在Tomcat下使用hibernate为H2数据库文件提供相对路径?

我有一个必须相当常见的设置:我有一个 H2 db,带有一个 db 文件。我在独立模式下使用数据库。Hibernate 提供对 db 的访问,我已将代码部署到 Tomcat 中。

问题是:我找不到简单地将 db 文件放入war并在休眠配置文件中提供相对路径的好方法。

目前,我必须c://whatever_db_file_container_dir/dbname在休眠配置中使用路径。

这使我无法部署零配置 Web 应用程序。有没有办法把这个设置变成一个自包含的零配置包?

0 投票
2 回答
496 浏览

java - H2 数据库错误信息本地化

我对 H2 数据库异常消息有疑问。消息的语言对应于操作系统语言(我使用的是 Windows)。是否可以关闭本地化功能以仅获取英语消息?