2011-11-19 18 views
5

W tym kodzie próbuję usunąć tabele, jeśli już istnieją za każdym razem, gdy uruchomię program, ale kontrola nie wchodzi w zakres instrukcji if. table1 i table2 są obecne w bazie danych. Sprawdziłem to w mojej bazie danych. Ponieważ nie wchodzi w skład instrukcji if, w ostatnim wierszu jest zgłaszany następujący błąd, gdy próbuję utworzyć tabele: ORA-00955: name is already used by an existing object. Co ja robię źle?nazwa jest już używana przez istniejący obiekt

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(" +..... 

Odpowiedz

5

Jeśli tabele table1 i table2 zostały utworzone przez program powyżej, a następnie ich nazwiska zostaną aktywowane przez Oracle. Zamiast tego spróbuj podać:

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

(i podobnie dla table2).

Ewentualnie, jeśli chcesz tabele mają być utworzone z małych liter w ich nazwach zamiast ująć ich nazwy w podwójnych cudzysłowach, czyli

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

chciałbym zastąpić tę linię

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

z tym jednym

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