在浏览器中不显示 H2 表



你好,

我在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%,因为我可以持久化和读取数据

ноя 10, 2016 11:15:59 AMorg.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactoryinitDatabase

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

ноя 10, 2016 11:15:59 AMorg.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript

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

ноя 10, 2016 11:15:59 AMorg.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript

INFO:已执行的SQL脚本从类路径资源[创建。Sql] in 479

女士

ноя 10, 2016 11:15:59 AMorg.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript

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

ноя 10, 2016 11:15:59 AMorg.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript

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

女士

ноя 10, 2016 11:16:09 AMorg.springframework.orm.hibernate5.HibernateTransactionManagerafterPropertiesSet

INFO: Using DataSource(org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory EmbeddedDataSourceProxy@162b3d47美元)

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

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

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

jdbc:h2:mem:testdb
,它不是持久的,你不能通过web控制台连接到它。

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

取决于你想做什么

  • 保存数据——>使用基于本地H2数据库的文件
  • 保持在内存中——>也许这个SO的答案可以是一个解决方案

edit添加更多细节

在某些情况下,只有一个到内存数据库的连接是有效的必需的。这意味着要打开的数据库是私有的。在这个情况下,数据库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和类装入器中创建的。

相关内容

最新更新