我有Java Spring项目, 在application.properties文件中我有:
spring.jpa.hibernate.ddl-auto=validate
spring.datasource.schema=classpath:/data/hsqldb/schema.sql
spring.datasource....
...
在data / hsqldb / schema.sql中的我有简单的表:
DROP TABLE IF EXISTS ToDoItem;
CREATE TABLE ToDoItem (
id BIGINT NOT NULL AUTO_INCREMENT,
title varchar(500) NOT NULL,
PRIMARY KEY (id)
);
我启动应用程序,在ToDoItem表中创建一些数据,但每次重新启动应用程序时,它都会删除此表中的所有数据。 我希望Hibernate只是在DB中验证表结构,如果没有问题 - 不要触摸数据。
顺便说一句,我试图注释掉' DROP TABLE IF EXISTS ToDoItem' 行,但在这种情况下我得到了Exception:com.mysql.jdbc.exceptions。 jdbc4.MySQLSyntaxErrorException:表' todoitem'已存在
答案 0 :(得分:0)
如果已存在,您已写入查询以删除该表。因此,它总是删除并再次创建表。因此,如果表已经存在,我们不需要删除。
This可能有助于检查已存在的表格是否存在。
答案 1 :(得分:0)
首先,每次重新启动应用程序时,如果每次运行此文件,那么肯定会删除所有数据。
DROP TABLE IF EXISTS ToDoItem;
首先删除数据然后重新创建
CREATE TABLE ToDoItem(
首先检查表格如下:
IF (EXISTS (SELECT *
FROM INFORMATION_SCHEMA.TABLES
WHERE TABLE_SCHEMA = 'SchemaName'
AND TABLE_NAME = 'TableName'))
BEGIN
--some code
END
ELSE
BEGIN
-- Create table code
END
如果存在,则验证否则创建
答案 2 :(得分:0)
你接缝使用MySql - 在这种情况下你可以使用crete if not exists
,不需要删除:
CREATE IF NOT EXISTS TABLE ToDoItem (
id BIGINT NOT NULL AUTO_INCREMENT,
title varchar(500) NOT NULL,
PRIMARY KEY (id)
);