【问题标题】:JavaDB - CREATE TABLE IF NOT EXISTS - how to?JavaDB - 如果不存在则创建表 - 如何?
【发布时间】:2013-08-10 03:11:45
【问题描述】:

我正在尝试使用 JavaDB (Derby) 创建表,但如果我尝试添加 IF NOT EXISTS:

CREATE TABLE IF NOT EXISTS etc (ID BIGINT PRIMARY KEY, title VARCHAR(150))

我得到错误:

java.sql.SQLSyntaxErrorException:语法错误:在 第 1 行,第 17 列。

我记得它适用于 MySQL。检查表是否存在的语法/最简单的方法是什么?

编辑:

终于找到了解决办法:

DatabaseMetaData dbmd = conn.getMetaData();
ResultSet rs = dbmd.getTables(null, "APP", "ETC", null);
if (rs.next()) {
    System.out.println("Table " +  rs.getString(3) + " exists");
}

我注意到,如果表名是使用引号“etc”创建的,则表名区分大小写,否则 - 名称必须大写。根据 API 文档:“必须与存储在数据库中的表名匹配”。

【问题讨论】:

    标签: sql create-table javadb


    【解决方案1】:
    if not exists (select * from sysobjects where name='etc' and xtype='U')
    create table etc(
       ID BIGINT PRIMARY KEY, title VARCHAR(150)
    );
    

    如果不存在,它将创建一个名为 etc 的表。

    更多关于here的内容。

    祝你好运

    【讨论】:

    • 谢谢,但我的数据库中没有这样的 sysobjects 表。表列表: SYSCONGLOMERATES SYSTABLES SYSCOLUMNS SYSSCHEMAS SYSCONSTRAINTS SYSKEYS SYSDEPENDS SYSALIASES SYSVIEWS SYSCHECKS SYSFOREIGNKEYS SYSSTATEMENTS SYSFILES SYSTRIGGERS SYSSTATISTICS SYSDUMMY1 SYSTABLEPERMS SYSCOLPERMS SYSROUTINEPERMS SYSROLES SYSSEQUENCES SYSPERMS。仍然得到错误..
    • 试试这个链接;还有更多有用的东西可以尝试替换第一个 select 语句。 stackoverflow.com/questions/205736/…
    • 以上方法都不适用于我。也许适用于其他数据库,但不适用于 javaDB/Derby。
    猜你喜欢
    • 1970-01-01
    • 2010-12-03
    • 2013-05-26
    • 2010-09-19
    • 1970-01-01
    • 2012-02-04
    • 2014-11-11
    • 2014-03-17
    相关资源
    最近更新 更多