5

在这段代码中,如果每次运行程序时表已经存在,我都会尝试删除它们,但控件不会进入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(" +.....
4

2 回答 2

6

我会替换这条线

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

有了这个

ResultSet rs1 = md.getTables(null, null, "TABLE1",types );
于 2011-11-19T22:08:07.940 回答
5

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

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

(和类似的table2)代替。

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

    statement.executeUpdate("create table \"table1\" (....)");
于 2011-11-19T22:06:33.787 回答