[英]Doesn't show H2 tables in browser
你好,
我在 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 AM org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory initDatabase
> 信息:启动嵌入式数据库:url='jdbc:h2:mem:testdb;DB_CLOSE_DELAY=-1;DB_CLOSE_ON_EXIT=false', username='sa'
ноя 10, 2016 11:15:59 AM org.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript
信息:从类路径资源 [create.sql] 执行 SQL 脚本
ноя 10, 2016 11:15:59 AM org.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript
信息:在 479 毫秒内从类路径资源 [create.sql] 执行 SQL 脚本。
ноя 10, 2016 11:15:59 AM org.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript
信息:从类路径资源 [test.sql] 执行 SQL 脚本
ноя 10, 2016 11:15:59 AM org.springframework.jdbc.datasource.init.ScriptUtils executeSqlScript
信息:在 11 毫秒内从类路径资源 [test.sql] 执行 SQL 脚本。
ноя 10, 2016 11:16:09 AM org.springframework.orm.hibernate5.HibernateTransactionManager afterPropertiesSet
信息:使用 Hibernate SessionFactory 的数据源 [org.springframework.jdbc.datasource.embedded.EmbeddedDatabaseFactory$EmbeddedDataSourceProxy@162b3d47] 用于 HibernateTransactionManager
但是当我打开 h2-console 并使用当前的用户名和密码连接到这个数据库时,我什么也找不到。
这很奇怪,我不知道是什么问题。 请帮帮我。
非常感谢。
问题是你创建了一个内存数据库
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 必须包含 name 。 示例:
jdbc:h2:mem:db1
。 使用这个 URL 访问同一个数据库只能在同一个虚拟机和类加载器环境中工作。
URL jdbc:h2:mem:db1
(具有名称的内存数据库,在本例中为db1
)创建一个允许多个连接的数据库。 只要连接是在同一个 JVM 和类加载器中创建的。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.