DROP TABLE IF EXISTS Pose ;
导致错误
Error code -1, SQL state 42X01: Syntax error: Encountered "EXISTS" at line 1, column 15.
我使用默认的 Derby 示例数据库从 NetBeans 7.3 内部运行它。
Derby 当前不支持 IF EXISTS
MySQL 6.0 声明表的语法是这样的:
CREATE TABLE [IF NOT EXISTS] tableName ...
删除表的 MySQL 语法是这样的:
DROP TABLE [IF EXISTS] tableName ...
这些子句是 MySQL 扩展,不属于 ANSI/ISO SQL 标准。这个功能可能是 MySQL 特有的:我找不到 Derby、Postgres、Oracle 或 DB2 的任何类似文档。
你想创建一个表吗?如果是,这就是你应该做的:
public void createTables() throws SQLException {
Statement statement = getConnection().createStatement();
System.out.println("Checking database for table");
DatabaseMetaData databaseMetadata = getConnection().getMetaData();
ResultSet resultSet = databaseMetadata.getTables(null, null, "PATIENT", null);
if (resultSet.next()) {
System.out.println("TABLE ALREADY EXISTS");
} else {
//language=MySQL
statement.execute("CREATE TABLE Patient (" +
"CardNumber CHAR(10) NOT NULL PRIMARY KEY, " +
" FirstName CHAR(50)," +
" MiddleName CHAR(50)," +
" LastName CHAR(50) )");
}
}
请记住将所有大写字母用于您传入的表名databaseMetadata.getTables(...)
我能找到的最佳选择是查询系统表以查看该表是否存在。
select count(*) from sys.systables where tablename = 'YOUR_TABLE_NAME'"
我在删除存储过程时遇到了类似的问题。可以使用此语句查询它们。
select count(*) from sys.sysaliases where alias = 'YOUR_STORED_PROCEDURE_NAME'
如果有人希望在使用 Spring 测试框架运行的 sql 文件中删除并创建表,请检查https://stackoverflow.com/a/47459214/3584693以获取确保在删除表时不会引发异常的答案当所述表不存在时调用。