2011-11-19 100 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);