标签: h2db

如何显示本地h2数据库(Web控制台)的内容?

最近我加入了一个新的团队,这里的人们使用h2进行存根服务.

我想知道我是否可以使用Web界面显示此数据库的内容.在工作中,它可以去localhost:5080

我有一个使用h2数据库的项目,但是当我点击时我看不到h2 web控制台 localhost:5080

我也试过localhost:8082- 它也行不通.

我的项目配置(成功运行):

     <bean id="wrappedDataSource" class="net.bull.javamelody.SpringDataSourceFactoryBean">
        <property name="targetName" value="dataSource" />
     </bean>

     <bean id="wrappedDataSource" class="net.bull.javamelody.SpringDataSourceFactoryBean">
            <property name="targetName" value="dataSource" />
        </bean>

        <bean class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close" id="dataSource">
            <property name="driverClassName" value="org.h2.Driver" />
            <property name="url" value="jdbc:h2:~/test;MODE=PostgreSQL" />
            <property name="username" value="sa" />
            <property name="password" value="" />
        </bean>

        <bean id="sessionFactory"
              class="org.springframework.orm.hibernate4.LocalSessionFactoryBean">
            <property name="dataSource" ref="wrappedDataSource"/>
            <property name="configLocation">
                <value>classpath:hibernate-test.cfg.xml</value>
            </property>
            <property name="hibernateProperties">
                <props>
                    <prop key="hibernate.show_sql">false</prop>
                    <prop key="hibernate.connection.charSet">UTF-8</prop>
                    <prop key="hibernate.format_sql">true</prop>
                    <prop key="hbm2ddl.auto">create-drop</prop>
                </props>
            </property>
        </bean>

        <context:property-placeholder location="classpath:jdbc.properties"/>
Run Code Online (Sandbox Code Playgroud)

我没有想法如何访问h2 web控制台.请帮忙.

PS

我只在.m2文件夹中看到提到h2 …

java orm spring h2 h2db

19
推荐指数
1
解决办法
2万
查看次数

H2 db'Chunk不再存在'错误

当我尝试向db"INSERT INTO invite_users VALUES('id',user_name')添加新行时"

我收到这个错误:

General error: "java.lang.IllegalStateException: Chunk 2089 no longer exists [1.4.181/9]"
Run Code Online (Sandbox Code Playgroud)

可能这是db的一些问题,因为当我试图将相同的行添加到新的db时 - 错误消失了.

2014年11月20日更新

好消息!我联系了H2 db的开发人员并发现他们将在下一个版本中修复该bug. https://groups.google.com/forum/#!topic/h2-database/i_GHXExjotc

2014年12月6日更新

一个简单的解决方法是通过将"; mv_store = false"附加到数据库URL来禁用MVStore.

但是,如果你需要旧的数据库,这个技巧将不起作用.它创建了新的数据库,扩展名为.h2.db而不是.mv.db

要解决此问题,您需要创建旧数据库".mv.db"的SQL脚本(使用"恢复"工具),然后使用"runscript ..."运行此脚本.

java database h2 h2db

11
推荐指数
1
解决办法
1658
查看次数

无法从H2 db获得结果

我试图从h2 db获取值,但总是得到这个错误

 org.h2.jdbc.JdbcSQLException: No data is available [2000-171]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:329)
    at org.h2.message.DbException.get(DbException.java:169)
    at org.h2.message.DbException.get(DbException.java:146)
    at org.h2.message.DbException.get(DbException.java:135)
    at org.h2.jdbc.JdbcResultSet.checkOnValidRow(JdbcResultSet.java:2956)
    at org.h2.jdbc.JdbcResultSet.get(JdbcResultSet.java:2962)
    at org.h2.jdbc.JdbcResultSet.getInt(JdbcResultSet.java:306)
Run Code Online (Sandbox Code Playgroud)

我用Google搜索了一个答案

一定要调用rs.next(); 在使用任何getter方法之前.

但我确实叫rs.next()......

这是我的代码:

public User getUser(int userId) throws SQLException {
    User u = new User(userId);

    try {
        Statement st = conn.createStatement();
        ResultSet rs = st.executeQuery("SELECT * FROM invited_users WHERE user_id=" + userId);
        rs.next();

        u.setName(rs.getString("user_name"));

    } catch (SQLException except) {
        JOptionPane.showMessageDialog(null, "Unable to load user! " + except);
    }
    return u;
}
Run Code Online (Sandbox Code Playgroud)

java h2 h2db

9
推荐指数
1
解决办法
6346
查看次数

如何解决h2数据库和springboot中的错误用户名和密码错误?

application.properties 中使用的属性

server.port=8085
spring.datasource.url=jdbc:h2:~/test spring.datasource.driverClassName=org.h2.Driver 
spring.datasource.username=root 
spring.datasource.password=root 
spring.jpa.database-platform=org.hibernate.dialect.H2Dialect 
spring.jpa.show-sql=true 
spring.jpa.hibernate.ddl-auto=update 
spring.h2.console.enabled=true 
spring.h2.console.path=/h2 
Run Code Online (Sandbox Code Playgroud)

h2数据库和springboot中的错误如何解决错误的用户名和密码错误?

org.h2.jdbc.JdbcSQLInvalidAuthorizationSpecException: Wrong user name or password [28000-200]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:461) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.message.DbException.getJdbcSQLException(DbException.java:429) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.message.DbException.get(DbException.java:205) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.message.DbException.get(DbException.java:181) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.message.DbException.get(DbException.java:170) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.engine.Engine.validateUserAndPassword(Engine.java:357) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.engine.Engine.createSessionAndValidate(Engine.java:176) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.engine.Engine.createSession(Engine.java:166) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.engine.Engine.createSession(Engine.java:29) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.engine.SessionRemote.connectEmbeddedOrServer(SessionRemote.java:340) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:173) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.jdbc.JdbcConnection.<init>(JdbcConnection.java:152) ~[h2-1.4.200.jar:1.4.200]
    at org.h2.Driver.connect(Driver.java:69) ~[h2-1.4.200.jar:1.4.200]
    at com.zaxxer.hikari.util.DriverDataSource.getConnection(DriverDataSource.java:138) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newConnection(PoolBase.java:358) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.PoolBase.newPoolEntry(PoolBase.java:206) ~[HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.createPoolEntry(HikariPool.java:477) [HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.checkFailFast(HikariPool.java:560) [HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.pool.HikariPool.<init>(HikariPool.java:115) [HikariCP-3.4.5.jar:na]
    at com.zaxxer.hikari.HikariDataSource.getConnection(HikariDataSource.java:112) [HikariCP-3.4.5.jar:na] …
Run Code Online (Sandbox Code Playgroud)

h2db spring-boot

8
推荐指数
1
解决办法
1万
查看次数

Hibernate抛出org.hibernate.persister.entity.SingleTableEntityPersister

我正在使用JBoss AS 7和H2数据库.我有一个独立的应用程序,试图像这样连接到这个数据库.

我的配置文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
                                         "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
 <session-factory name="Test">
  <property name="hibernate.connection.driver_class">org.h2.Driver</property>
  <property name="hibernate.connection.url">jdbc:h2:mem:test</property>
  <property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
  <mapping class="Kunde" resource="Kunde.hbm.xml"/>
  <mapping class="Mitarbeiter" resource="Mitarbeiter.hbm.xml"/>
 </session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

我的映射文件是:

<?xml version="1.0"?>
<!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN"
"http://www.hibernate.org/dtd/hibernate-mapping-3.0.dtd">
<!-- Generated Oct 26, 2012 7:34:15 AM by Hibernate Tools 3.4.0.CR1 -->
<hibernate-mapping>
    <class name="Kunde" table="KUNDE">
        <id name="id" type="long">
            <column name="ID" />
            <generator class="assigned" />
        </id>
        <property name="vorname" type="java.lang.String">
            <column name="VORNAME" />
        </property>
        <property name="nachname" type="java.lang.String">
            <column …
Run Code Online (Sandbox Code Playgroud)

hibernate exception h2 jboss7.x h2db

6
推荐指数
1
解决办法
4283
查看次数

在 h2 数据库中保存大文件

我最近将我的springboot项目中的h2数据库更新到2.1.210。

这引发了一些问题,其中大部分我都能自己解决。我无法解决的问题是在数据库中保存大文件。

当我尝试上传 ~3,5MB 文件时,出现以下错误:

org.h2.jdbc.JdbcSQLDataException: 
Value too long for column "BINARY VARYING": "504b03040a00000000008a6bd150e8d6354d8303010083030100070000003030302e706e6789504e... (3648495)" [22001-210]
Run Code Online (Sandbox Code Playgroud)

在 h2 1.4.200 上完美运行的注释如下所示

@Lob
@Type( type = "binary" )
@Column(name = "ZIP", columnDefinition="BLOB")
private byte[] zip;
Run Code Online (Sandbox Code Playgroud)

我不知道它是否相关,但我在使用时也遇到错误

@Type( type = "text" )
Run Code Online (Sandbox Code Playgroud)

这里的错误是

Precision ("2147483647") must be between "1" and "1048576" inclusive
Run Code Online (Sandbox Code Playgroud)

因为每当我使用“文本”时,它就会被翻译为varchar(2147483647)

hibernate h2 h2db spring-boot

5
推荐指数
1
解决办法
1198
查看次数

Spring Boot中进行单元测试之前,通过data.sql文件向h2数据库插入数据

我想在 spring boot+ JPA 中执行单元测试。为此,我创建了配置文件来为 dataSource、所有 hibernate 属性、entityManagerFactory 和 transactionManager 创建 bean。一切都很完美。表是由模型类创建的。但现在我想通过data.sql文件在数据库的所有表中插入数据进行测试。我将 data.sql 文件保留在 src/main/resources 中,但它没有加载该文件。那么在开始单元测试之前如何在 h2 数据库中加载数据。

这是我的配置文件 -


import java.util.Properties;

import javax.sql.DataSource;

import org.hibernate.cfg.Environment;
import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.PropertySource;
import org.springframework.dao.annotation.PersistenceExceptionTranslationPostProcessor;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;
import org.springframework.jdbc.datasource.DriverManagerDataSource;
import org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseBuilder;
import org.springframework.orm.jpa.JpaTransactionManager;
import org.springframework.orm.jpa.LocalContainerEntityManagerFactoryBean;
import org.springframework.orm.jpa.vendor.HibernateJpaVendorAdapter;
import org.springframework.transaction.PlatformTransactionManager;
import org.springframework.transaction.annotation.EnableTransactionManagement;


@Configuration
@EnableJpaRepositories(basePackages = "base_package_name")
@EnableTransactionManagement
public class JPAConfig {

    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName("org.h2.Driver");
        dataSource.setUrl("jdbc:h2:mem:myDb;DB_CLOSE_DELAY=-1");
        /*dataSource.setDriverClassName("org.hsqldb.jdbcDriver");
        dataSource.setUrl("jdbc:hsqldb:mem:testdb");*/
        dataSource.setUsername("sa");
        dataSource.setPassword("");

        return dataSource;
    } …
Run Code Online (Sandbox Code Playgroud)

java h2 h2db spring-boot spring-boot-test

4
推荐指数
1
解决办法
1万
查看次数

在Spring上的H2数据库上集成测试MySQL语法的问题

我正在开发一个使用不同MySQL模式进行客户管理的项目,eG每个客户都有自己的数据库模式,该模式是使用骨架模板创建的.

对于兼容性问题,我必须从Java创建新的MySQL模式,这是在PHP之前完成的.我创建了一个小型服务类,它通过重复使用在MySQL数据库上完美地CREATE TABLE 'a' LIKE 'b';工作,但是这不适用于H2db,因为H2 LIKE在创建表时不支持-part.然后我创建了一个MySQL并修改了该文件,以便用Java(Files.readAllLines可以输入Statement.executeBatch)轻松处理.但是,由于语句如此,此转储在H2db上也会失败COLLATION=UTF8.遗憾的是,这些都很重要,因为我们经常需要特殊的字符,需要正确编码,所以不建议简单地从sql文件中删除所述语句.

我像这样初始化DataSource:

public DataSource dataSource(ResourceLoader resourceLoader) {
    return new EmbeddedDatabaseBuilder()
            .setType(EmbeddedDatabaseType.H2)
            .setScriptEncoding("UTF-8")
            .addScript("data.sql").build();
}
Run Code Online (Sandbox Code Playgroud)

所以,我的配置可能性很少.我们gradle用来构建我们的应用程序,所以建议的maven-plugin也无济于事 - 至少我还没有找到使用它gradle,如果可能的话.

所以我的问题在于,我需要检查服务是否真正保持数据正确,但我无法在内存中执行,因为H2不支持语法,我不允许使用"真正的"MySQL数据库,因为我们所有的测试都必须与"真实"连接分离,并且必要时只能使用数据库的内存存储.

mysql spring embedded-database h2db

2
推荐指数
1
解决办法
1438
查看次数

H2DB的默认URL和凭据?

我已经在springBoot应用程序中添加了H2DB以进行单元测试。

我在application-test.properties中添加了:

spring.datasource.name = h2db

spring.h2.console.enabled = true

它的工作正常,保存值。

但是它是如何工作的以及如何浏览该数据库?

spring-data-jpa h2db spring-boot

2
推荐指数
1
解决办法
2921
查看次数

无法将 H2 DB 与 Hibernate 连接

我正在尝试在使用休眠时创建一个小的 H2 内存数据库。但该表未显示在 H2 UI 中。我不确定是否需要在配置中包含其他任何内容。

这是代码: 下面是为 hibernate 和 h2 DB 添加的依赖项。

pom.xml

<dependency>  
    <groupId>org.hibernate</groupId>  
    <artifactId>hibernate-core</artifactId>  
    <version>5.3.1.Final</version>  
</dependency> 

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

</dependency>  
Run Code Online (Sandbox Code Playgroud)

这是包含所有 H2 DB 详细信息的配置 XML。

休眠文件.cfg.xml

<?xml version="1.0" encoding="UTF-8"?>  
<!DOCTYPE hibernate-configuration PUBLIC  
        "-//Hibernate/Hibernate Configuration DTD 5.3//EN"  
        "http://www.hibernate.org/dtd/hibernate-configuration-5.3.dtd">  

<hibernate-configuration>
    <session-factory>
        <property name="connection.driver_class">org.h2.Driver</property>
        <property name="connection.url">jdbc:h2:mem:test;DB_CLOSE_DELAY=-1</property>
        <property name="dialect">org.hibernate.dialect.H2Dialect</property>
        <property name="show_sql">true</property>
        <property name="hbm2ddl.auto">create</property>
        <mapping class="HiberDemo.Employee"/>
    </session-factory>
</hibernate-configuration>
Run Code Online (Sandbox Code Playgroud)

这将与其他列一起创建表。

雇员.java

package HiberDemo;

import javax.persistence.Entity;  
import javax.persistence.Id;  
import javax.persistence.Table;  

@Entity  
@Table(name= "emp500")   
public class Employee {    

@Id   
private int id;    
private …
Run Code Online (Sandbox Code Playgroud)

java hibernate h2db

2
推荐指数
2
解决办法
5514
查看次数

在 Spring Boot 上下文中使用 h2db 进行集成测试是一种不好的做法吗?

最近,我们的团队提出了一个问题:如果生产环境依赖于不同的数据库引擎(在我们的例子中为 MySQL8),则使用 h2db 进行集成测试是否是一种不好的做法/应该避免。

\n

考虑到我们在后端使用 spring boot/hibernate,我不确定我是否同意这一点。

\n

我做了一些阅读并发现这篇文章https://phauer.com/2017/dont-use-in-memory-databases-tests-h2/基本上说明了以下内容(以及更多内容):

\n
\n

长话短说

\n

使用内存数据库进行测试会降低测试的可靠性和\n范围。尽管基于 h2 的测试是绿色的,但您的应用程序\xe2\x80\x99s SQL 在生产环境中\n可能会针对真实数据库失败。

\n
\n
\n

它们提供与真实数据库不同的功能。可能的\n后果是:

\n
    \n
  • 您更改应用程序\xe2\x80\x99s SQL 代码只是为了使\nit 在真实数据库和内存数据库中运行。这可能会导致实施效率较低、优雅、准确或可维护性较差。或者\n你根本无法\xe2\x80\x99 做某些事情。
  • \n
  • 您完全跳过某些\n功能的测试。
  • \n
\n
\n

据我所知,对于具有一些业务逻辑的简单 CRUD 应用程序,所有这些点都与我有关(本文中还有更多内容),因为 hibernate 包装了所有 SQL 并且代码中没有本机 SQL。

\n

有没有我忽略或没有考虑到的反对 h2db 的观点?关于使用内存数据库与 Spring Boot/Hibernate 进行集成测试是否有“最佳实践”?

\n

mysql integration-testing hibernate h2db spring-boot

2
推荐指数
1
解决办法
2087
查看次数

Keycloak H2 数据库中的空 SESSION 表

我使用 Keycloak 15.0.2 和默认的 H2 数据库。我已经登录了多个用户,并且可以在 Keycloak 会话选项卡中获取活动会话,但在数据库中,我看不到与 USER_SESSION 和 CLIENT_SESSION 等会话相关的所有表中的任何条目。

有人对我如何获得这些条目有任何建议吗?

提前致谢。

database session usersession h2db keycloak

2
推荐指数
1
解决办法
835
查看次数

H2 数据库 - 抛出一般错误:“java.lang.IllegalStateException:无法读取位置 2199023614787 处的页面

我正在开发一个使用 H2 数据库的应用程序。过去使用此技术没有问题,但是在下载 h2 数据库的新副本并运行 jar 时,我无法使用默认设置登录!我正在跑步h2-1.4.200.jar并受到以下欢迎:

General error: "java.lang.IllegalStateException: Unable to read the page at position 2199023614787 [1.4.200/6]" [50000-200] HY000/50000 (Help)
Run Code Online (Sandbox Code Playgroud)

我试图运行默认设置只是为了连接到数据库,但似乎没有任何效果。我已经尝试了以下但没有运气,以及 github 等上的一些其他来源:

嵌入式 H2 数据库“NonTransientError: Unable to read the page at position”错误?

我在我的项目中使用以下依赖项:

    <dependency>
        <groupId>com.h2database</groupId>
        <artifactId>h2</artifactId>
        <version>1.4.200</version>
    </dependency>
Run Code Online (Sandbox Code Playgroud)

并下载相应版本的H2数据库—— 1.4.200

过去有没有其他人在 H2 数据库上遇到过这样的问题?我收到的错误如下图所示:

H2 数据库控制台错误 1:

在此处输入图片说明

任何帮助将不胜感激,我还尝试在我的 maven 依赖项和运行的 h2 版本中降级到 1.4.190 版本 - h2-1.4.190

java database h2 h2db

1
推荐指数
1
解决办法
1644
查看次数