2011-11-19 28 views
5

En este código intento eliminar las tablas si ya existen cada vez que ejecuto el programa, pero el control no está dentro de las instrucciones if. table1 y table2 están presentes en la base de datos. Lo he comprobado en mi base de datos. Como no está yendo en las declaraciones if, está dando el siguiente error en la última línea, cuando intento crear las tablas: ORA-00955: name is already used by an existing object. ¿Qué estoy haciendo mal?El nombre ya está siendo utilizado por un objeto existente

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

Respuesta

5

Si las tablas table1 y table2 fueron creados por el programa anterior, a continuación, sus nombres se han capitalizado por Oracle. Trate

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

(y lo mismo para table2) en su lugar.

Alternativamente, si desea que las tablas que se creen con letras minúsculas en sus nombres en lugar, incluya sus nombres entre comillas dobles, es decir

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

me reemplace esta línea

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

con este

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