在这段代码中,我试图删除每次运行程序时已存在的表,但控件不在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(" +.....
答案 0 :(得分:6)
我会替换这一行
ResultSet rs1 = md.getTables(null, null, "table1",types );
这一个
ResultSet rs1 = md.getTables(null, null, "TABLE1",types );
答案 1 :(得分:5)
如果上面的程序创建了表table1
和table2
,那么它们的名称将由Oracle大写。尝试
ResultSet rs1 = md.getTables(null, null, "TABLE1", types);
(同样适用于table2
)。
或者,如果您希望在名称中使用小写字母创建表格,请将其名称用双引号括起来,即
statement.executeUpdate("create table \"table1\" (....)");