2011-11-19 54 views
5

在此代码中,我试图删除表,如果它们在每次运行该程序时都已存在,但控件不在if语句内。 table1table2存在于数据库中。我已经在我的数据库中检查过了。由于它不在if声明中,所以当我尝试创建表时,它会在最后一行给出以下错误:ORA-00955: name is already used by an existing object。我究竟做错了什么?名称已被现有对象使用

Statement statement = connection.createStatement(); 
    DatabaseMetaData md = connection.getMetaData(); 
    String[] types = {"TABLE"}; 
    ResultSet rs1 = md.getTables(null, null, "table1",types); 
    if (rs1.next()) { 
     System.out.println(rs1.getString(3)); 
     statement.executeUpdate("drop table table1"); 
    } 
    rs1.close(); 

    ResultSet rs2 = md.getTables(null, null, "table2", types); 
    if (rs2.next()) { 
     statement.executeUpdate("drop table table2"); 
    } 
    rs2.close(); 
    statement.executeUpdate("create table table1(" +..... 

回答

5

如果表table1table2通过上述程序创建的,那么他们的名字将被甲骨文资本。尝试

ResultSet rs1 = md.getTables(null, null, "TABLE1", types); 

(以及类似的table2)。

另外,如果你想在其名称中的小写字母来创建的表,而不是,请将他们的名字在双引号,即

statement.executeUpdate("create table \"table1\" (....)"); 
6

我会替换该行

ResultSet rs1 = md.getTables(null, null, "table1",types); 

与这一个

ResultSet rs1 = md.getTables(null, null, "TABLE1",types);