Java MySQL 如果表存在

3

感谢您对我在学习Java和MySQL方面的支持。我想要做的是检查表是否存在。目前的情况是,如果数据库已经创建并且表也已经创建,那么就不会出现问题。 但是如果我运行相同的代码,就会出现表已经存在的错误。

重要的问题是如何检查表是否存在? 以下是我编写的一些代码

if (tabCrea.createTable(dbDef, con, preStatement, tabStruct.getAgentDetail(), "Agent Details"))
    System.out.println("Passed Here");
else
    System.out.println("Failed Here");

调用以下内容

protected boolean createTable(DataBaseDefaults dbDef, Connection con, Statement statement, String myTableName, String tableName) {

    try {
        Class.forName(dbDef.getJdbcDriver());
        con = DriverManager.getConnection(dbDef.getDbAddress() + dbDef.getPortAddress() + dbDef.getDbName(), 
                dbDef.getDbUserName(), dbDef.getDbPassword());
        statement = con.createStatement();
        statement.executeUpdate(myTableName);
        System.out.println("Table Sucessfully Created : " + tableName);
        return true;
    }
    catch (SQLException e ) {
        //Problem is caught here;
        System.out.println("An error has occured on Table Creation with Table " + tableName);
        return false;
    }
    catch (ClassNotFoundException e) {
        System.out.println("There was no Mysql drivers found");
        return false;
    }
}

表格定义在这里

private String agentDetail = "CREATE TABLE AgentDetail ("
    + "AgentDetailIdNo INT(64) NOT NULL AUTO_INCREMENT,"
    + "Initials VARCHAR(2),"
    + "AgentDetailDate DATE,"
    + "AgentDetailCount INT(64),"
    + "PRIMARY KEY(AgentDetailIdNo)"
    + ")";

一个谦虚的黑客会很感激任何提供的帮助。

2
如果不存在则创建表 - Eric Hotinger
4个回答

7

有两种方法:

1) 如果您想要保留表格并且该表格已经存在,则使用IF NOT EXISTS

private String agentDetail = "CREATE TABLE IF NOT EXISTS AgentDetail (" ...

2) 如果你想删除表并重新开始,请先使用DROP TABLE语句删除该表。为此,请运行以下语句:

DROP TABLE IF EXISTS AgentDetail

在创建表查询之前(请注意,这将删除表中所有现有数据)。

1

1
你可以使用

标签。
SHOW TABLES LIKE '$this_table'  or
SHOW TABLES FROM $dbname 

并检查表是否已经存在


1

DatabaseMetaData API是JDBC规范的一部分,它是在Java中执行此操作的方式。您需要特别查看`getTables'方法。这是一个很好的类需要熟悉。


谢谢Jess,我已经看过了,但我知道在我能够欣赏它之前,我必须要了解更多。Keith - K Spriggs

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接