name已被现有对象使用

Ava*_*Ava 5 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(" +.....
Run Code Online (Sandbox Code Playgroud)

jav*_*nna 6

我会替换这一行

ResultSet rs1 = md.getTables(null, null, "table1",types );
Run Code Online (Sandbox Code Playgroud)

用这个

ResultSet rs1 = md.getTables(null, null, "TABLE1",types );
Run Code Online (Sandbox Code Playgroud)


Luk*_*ard 5

如果表table1table2被你的程序上面创建,然后他们的名字将被甲骨文资本.尝试

    ResultSet rs1 = md.getTables(null, null, "TABLE1", types);
Run Code Online (Sandbox Code Playgroud)

(而且类似地table2)代替.

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

    statement.executeUpdate("create table \"table1\" (....)");
Run Code Online (Sandbox Code Playgroud)