4
DROP TABLE IF EXISTS Pose ;

导致错误

Error code -1, SQL state 42X01: Syntax error: Encountered "EXISTS" at line 1, column 15. 

我使用默认的 Derby 示例数据库从 NetBeans 7.3 内部运行它。

4

5 回答 5

6

Derby 当前不支持 IF EXISTS

于 2013-09-03T17:28:15.543 回答
2

MySQL 6.0 声明表的语法是这样的:

CREATE TABLE [IF NOT EXISTS] tableName ...

删除表的 MySQL 语法是这样的:

DROP TABLE [IF EXISTS] tableName ...

这些子句是 MySQL 扩展,不属于 ANSI/ISO SQL 标准。这个功能可能是 MySQL 特有的:我找不到 Derby、Postgres、Oracle 或 DB2 的任何类似文档。

于 2015-09-18T05:50:16.400 回答
2

你想创建一个表吗?如果是,这就是你应该做的:

 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(...)

于 2016-08-08T16:20:16.853 回答
1

我能找到的最佳选择是查询系统表以查看该表是否存在。

select count(*) from sys.systables where tablename = 'YOUR_TABLE_NAME'"

我在删除存储过程时遇到了类似的问题。可以使用此语句查询它们。

select count(*) from sys.sysaliases where alias = 'YOUR_STORED_PROCEDURE_NAME'

于 2016-06-07T22:22:33.117 回答
0

如果有人希望在使用 Spring 测试框架运行的 sql 文件中删除并创建表,请检查https://stackoverflow.com/a/47459214/3584693以获取确保在删除表时不会引发异常的答案当所述表不存在时调用。

于 2017-11-23T15:57:23.543 回答