【问题标题】:Doesn't show H2 tables in browser不在浏览器中显示 H2 表
【发布时间】:2017-03-24 06:28:15
【问题描述】:

你好,

我在 Java Web 应用程序(Spring 4、Hibernate 5、Thymeleaf 3、H2database 1.4.192 等)上创建的浏览器中显示 h2 表时遇到问题。 它具有基于 Java 的配置。

我的数据源:

@Bean(name = "dataSource")
public DataSource getDataSource() {
    logger.info("Setting dataSource properties.");
    EmbeddedDatabaseBuilder builder = new EmbeddedDatabaseBuilder();
    EmbeddedDatabase embeddedDatabase = builder
            .continueOnError(true)
            .setType(EmbeddedDatabaseType.H2)
            .addScript(CREATE_SCRIPT)
            .addScript(INIT_SCRIPT)
            .build();
    return embeddedDatabase;
}

我的“CREATE_SCRIPT”:

CREATE TABLE CLIENTS
(
CLIENT_ID INT PRIMARY KEY AUTO_INCREMENT,
CLIENT_NAME VARCHAR(99) NOT NULL,
AGREEMENT BOOLEAN DEFAULT FALSE
);

CREATE TABLE ITEMS
(
  ITEM_ID INT PRIMARY KEY AUTO_INCREMENT,
  ITEM_NAME VARCHAR(99) NOT NULL,
  PRICE DECIMAL(10,2) NOT NULL
);

CREATE TABLE CLIENTS_ITEMS
(
  CLIENT_ID INT ,
  ITEM_ID INT NOT NULL,
  CONSTRAINT CLIENTS_CLIENT_ID_FK
  FOREIGN KEY (CLIENT_ID)
  REFERENCES CLIENTS(CLIENT_ID),
  CONSTRAINT ITEMS_ITEM_ID_FK
  FOREIGN KEY (ITEM_ID)
  REFERENCES ITEMS (ITEM_ID)
);

我的“INIT_SCRIPT”:

INSERT INTO ITEMS
(ITEM_NAME, PRICE) VALUES  ('Book', 5.50);
INSERT INTO ITEMS
(ITEM_NAME, PRICE) VALUES ('Hook', 15.00);
INSERT INTO ITEMS
(ITEM_NAME, PRICE) VALUES ('Nook', 199.9);
INSERT INTO ITEMS
(ITEM_NAME, PRICE) VALUES ('Snook', 1.9);
INSERT INTO ITEMS
(ITEM_NAME, PRICE) VALUES ('Stook', 0.99);
INSERT INTO ITEMS
(ITEM_NAME, PRICE) VALUES ('Mobile Phone', 10);

这些表 100% 创建,因为我可以持久化和获取数据。

2016 年 10 月 10 日上午 11:15:59 org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory 初始化数据库

> 信息:启动嵌入式数据库: url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', 用户名='sa'

2016 年 10 月 10 日上午 11:15:59 org.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript

INFO:从类路径资源 [create.sql] 执行 SQL 脚本

2016 年 10 月 10 日上午 11:15:59 org.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript

INFO:从 479 中的类路径资源 [create.sql] 执行 SQL 脚本 女士。

2016 年 10 月 10 日上午 11:15:59 org.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript

INFO:从类路径资源 [test.sql] 执行 SQL 脚本

2016 年 10 月 10 日上午 11:15:59 org.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript

INFO:从 11 中的类路径资源 [test.sql] 执行的 SQL 脚本 女士。

2016 年 10 月 10 日上午 11:16:09 org.springframework.orm.hibernate5.HibernateTransactionManager afterPropertiesSet

信息:使用数据源 [org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory$EmbeddedDataSourceProxy@162b3d47] HibernateTransactionManager 的 Hibernate SessionFactory

但是当我打开 h2-console 并使用当前用户名和密码连接到这个数据库时,我什么也找不到。

这很奇怪,我不知道问题是什么。 请帮帮我。
非常感谢。

【问题讨论】:

    标签: java spring hibernate datasource h2


    【解决方案1】:

    问题是你创建了一个内存数据库

    jdbc:h2:mem:testdb
    不是持久的,您无法通过 Web 控制台连接到它。

    见:http://www.h2database.com/html/features.html#in_memory_databases

    取决于你想做什么

    编辑更详细地添加它。

    在某些情况下,只有一个到内存数据库的连接是 必需的。这意味着要打开的数据库是私有的。在这个 情况下,数据库 URL 为 jdbc:h2:mem: 在其中打开两个连接 同一个虚拟机意味着开启两个不同的(私有) 数据库。

    URL jdbc:h2:mem:(一个没有名称的内存数据库)创建一个只能用于单个连接的数据库。在同一 JVM 中与 URL jdbc:h2:mem: 的新连接将创建一个新的内存数据库。

    有时到同一个内存数据库的多个连接是 必需的。在这种情况下,数据库 URL 必须包含名称。例子: jdbc:h2:mem:db1仅使用此 URL 访问同一数据库有效 在同一虚拟机和类加载器环境中

    URL jdbc:h2:mem:db1(一个有名字的内存数据库,在本例中为db1)创建一个允许多个连接的数据库。只要连接是在同一个 JVM 和类加载器中创建的。

    【讨论】:

    • 对不起,伙计,但这不是一个完全正确的答案。我正在使用 Spring MVC。
    猜你喜欢
    • 2019-04-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-11-25
    相关资源
    最近更新 更多