name已被现有对象使用

时间:2011-11-19 21:44:37

标签: java sql oracle database-metadata ora-00955

在这段代码中,我试图删除每次运行程序时已存在的表,但控件不在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(" +.....

2 个答案:

答案 0 :(得分:6)

我会替换这一行

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

这一个

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

答案 1 :(得分:5)

如果上面的程序创建了表table1table2,那么它们的名称将由Oracle大写。尝试

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

(同样适用于table2)。

或者,如果您希望在名称中使用小写字母创建表格,请将其名称用双引号括起来,即

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