如果 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中运行追加查询时出现“表已存在”错误