имя уже используется существующим объектом - PullRequest
5 голосов
/ 20 ноября 2011

В этом коде я пытаюсь удалить таблицы, если они уже существуют каждый раз, когда я запускаю программу, но элемент управления не входит в операторы if.table1 и table2 присутствуют в базе данных.Я проверил это в своей базе данных.Так как он не входит в операторы 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(" +.....

Ответы [ 2 ]

6 голосов
/ 20 ноября 2011

Я бы заменил эту строку

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

на эту

ResultSet rs1 = md.getTables(null, null, "TABLE1",types );
5 голосов
/ 20 ноября 2011

Если таблицы table1 и table2 были созданы вашей программой выше, то их имена будут заглавными в Oracle.Вместо этого попробуйте

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

(и аналогично для table2).

В качестве альтернативы, если вы хотите, чтобы вместо таблиц создавались строчные буквы в именах, заключите их имена вдвойные кавычки, т.е.

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