如果 Microsoft Access 中存在表,则删除表

Posted

技术标签:

【中文标题】如果 Microsoft Access 中存在表,则删除表【英文标题】:delete table if exists in Microsoft Access 【发布时间】:2012-02-15 06:39:00 【问题描述】:

我有一个应用程序,如果退出 Microsoft Access 数据库,我需要在其中删除表。 我看到了代码here。我要删除的表名是data_table,访问数据库文件名是local_entry 所以我需要更改代码以使其适用于我的应用程序。

public void testDropTable () throws SQLException
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection con = DriverManager.getConnection("jdbc:odbc:MsAccessDSN");
    Statement stmt = con.createStatement();
    ResultSet checkTable = con.getMetaData().getTables(null, null, "POI", null);
    String tableName = null;
    while (checkTable.next())
    
        System.out.println("In here");
        tableName = checkTable.getString("TABLE_NAME");
        System.out.println(tableName);
    
    if (tableName != null)
        try 
            String dropTable = "DROP TABLE ";
            String[] tables = DB_TABLE;
            for (int i = 0; i < tables.length; i++)
                String stringCode = new String();
                stringCode = stringCode + tables[i];
                System.out.println(dropTable + tables[i]);

                // Drop each table in the array.
                int temp = stmt.executeUpdate(dropTable + tables[i]);
            
        
        catch (Exception e) 
            System.err.println("Exception in testDropTable (): \n"
                    + "Drop Table testDropTable threw an exception: " +(e.getMessage()));
        
    
    else
        con.close();
    

我想我需要改变这两行:

String dropTable = "DROP TABLE ";
String[] tables = DB_TABLE;

我可以将 DROP TABLE 更改为 data_table 吗?第二行呢?这是什么DB_TABLE 我通过这种方式更改了整个代码,但直到出现问题:

public void testDropTable () throws SQLException
    try 
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
     catch (ClassNotFoundException e1) 
        e1.printStackTrace();
    
    Connection con = DriverManager.getConnection("jdbc:odbc:MsAccessDSN");
    Statement stmt = con.createStatement();
    ResultSet checkTable = con.getMetaData().getTables(null, null, "POI", null);
    String tableName = null;
    while (checkTable.next())
    
        System.out.println("In here");
        tableName = checkTable.getString("data_table");
        System.out.println(tableName);
    
    if (tableName != null)
        try 
            String dropTable = "DROP TABLE ";
            String[] tables = "data_table";
            for (int i = 0; i < tables.length; i++)
                String stringCode = new String();
                stringCode = stringCode + tables[i];
                System.out.println(dropTable + tables[i]);

                // Drop each table in the array.
                int temp = stmt.executeUpdate(dropTable + tables[i]);
            
        
        catch (Exception e) 
            System.err.println("Exception in testDropTable (): \n"
                    + "Drop Table testDropTable threw an exception: " +(e.getMessage()));
        
    
    else
        con.close();
    

【问题讨论】:

【参考方案1】:

试试这个代码

Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
Connection con = DriverManager.getConnection("jdbc:odbc:MsAccessDSN");
Statement stmt = con.createStatement();
// Specify the type of object; in this case we want tables
String[] types = "TABLE";
ResultSet checkTable = con.getMetaData().getTables(null, null, "%", types);
String tableName = null;

while (checkTable.next())

    System.out.println("In here");
    tableName = checkTable.getString(3)
    System.out.println(tableName);

    // check if the table 'data_table' exist in your database
    if (tableName.equals("data_table")    
        try 
            //drop the table if present  
            int temp = stmt.executeUpdate("DROP TABLE " + tableName);
            break;
        
        catch (Exception e) 
            System.err.println("Exception in testDropTable (): \n"
                + "Drop Table testDropTable threw an exception: " +(e.getMessage()));
        
        

con.close; 

欲了解更多信息,请访问此处Metadata

【讨论】:

谢谢兄弟...正是这个代码工作。如果您喜欢我的问题,请升级我的问题。 @shrish 你为什么从 OPs 问题中删除整个代码块? viinitvikash 是不是不需要那个代码块? @gideon 它只是一行代码被改变,OP 询问它是否正确。我想这个问题是自给自足的。 @Shirish11 但您建议直接从I think I need... 等中删除内容,编辑已在队列中被拒绝(不是我) @gideon 关于代码中的编辑I think I need.. OP 不知道代码实际在做什么,找出一些可以使其正常工作的随机替换是一个错误的概念。而 OP 本人建议升级他的问题。如果他发现他需要撤消更新,这取决于他【参考方案2】:

Drop table table name; 是删除数据库中的表的命令。 尝试将 DB_TABLE 替换为 data_table

String dropTable = "DROP TABLE ";
String[] tables = data_table;

试试这个

    public void testDropTable () throws SQLException
    Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
    Connection con = DriverManager.getConnection("jdbc:odbc:MsAccessDSN");
    Statement stmt = con.createStatement();
    ResultSet checkTable = con.getMetaData().getTables(null, null, "POI", null);
    String tableName = null;
    while (checkTable.next())
    
        System.out.println("In here");
        tableName = checkTable.getString("data_table");
        System.out.println(tableName);
    
    if (tableName != null)
        try 
            String dropTable = "DROP TABLE ";
            String[] tables = tableName;
            for (int i = 0; i < tables.length; i++)
                String stringCode = new String();
                stringCode = stringCode + tables[i];
                System.out.println(dropTable + tables[i]);

                // Drop each table in the array.
                int temp = stmt.executeUpdate(dropTable + tables[i]);
            
        
        catch (Exception e) 
            System.err.println("Exception in testDropTable (): \n"
                    + "Drop Table testDropTable threw an exception: " +(e.getMessage()));
        
    
    else
        con.close();
    

【讨论】:

ok chinna ...实际上我犯了一些错误。我需要在此代码中更改: tableName = checkTable.getString("TABLE_NAME");在这里我需要用 data_table 更改 TABLE_NAME 吗?你说用data_table改变DB_TABLE。但是表格是字符串的集合。 我用这种方式编写了整个代码,但直到它在我的应用程序中不起作用: 嗨vinitvikash。您可以将 DB_Table 替换为 table_name 或 data_table。 Table_name 实际上是一个字符串,其值为 data_table... 你能更正整个代码并发布它吗,因为我也尝试了上述方法,但问题一直存在。 ok..String[] tables = tableName; 显示一个错误即:类型不匹配:无法将表单字符串转换为字符串[]【参考方案3】:

对于任何对此问题感兴趣的人,我删除了已接受答案中的 while 循环语句并将代码简化为:

public void testDropTable() throws SQLException, ClassNotFoundException 
        Class.forName("sun.jdbc.odbc.JdbcOdbcDriver");
        Connection con = DriverManager.getConnection("jdbc:odbc:MsAccessDSN");
        Statement stmt = con.createStatement();
        String[] tables = "data_table";
        for (String table : tables) 
            try 
                stmt.executeUpdate("DROP TABLE " + table);
             catch (SQLException e) 
                System.err.println("Exception in testDropTable (): \n"
                    + "Drop Table testDropTable threw an exception: " +(e.getMessage()));
            
        
        con.close();
    

【讨论】:

以上是关于如果 Microsoft Access 中存在表,则删除表的主要内容,如果未能解决你的问题,请参考以下文章

Microsoft Access - 具有来自不同表的多个条件的 Dlookup

整个表搜索表单 - Microsoft Access 2010

Microsoft Access 2000 数据库表在删除安全性后不显示

在Access 2010中运行追加查询时出现“表已存在”错误

Microsoft Access 2016 查询为链接表中的空日期返回 1/1/1800

Microsoft Access 查询结果为空