我正在尝试编写一个方法来检查我的数据库中是否存在表,在java中。经过一番环顾,我找到了一个答案,说明我需要运行SELECT COUNT(*)FROM tableName;这样做,所以我写了下面的代码。
public static boolean isEmpty(Connection con) throws SQLException, ClassNotFoundException{
PreparedStatement stm = con.prepareStatement("SELECT COUNT(*) FROM Cities");
String[] tables = {"Cities", "Connections"};
ResultSet rs = null;
//for(String table : tables){
//stm.setString(1, "Cities");
rs = stm.executeQuery();
rs.next();
System.out.println(rs.getInt(1));
if(rs.getInt(1) != 0){
return false;
}
//}
return true;
}
注意:我正在使用oracle sql。 此外,如果表实际上不存在,那么该查询是否应该返回0?在这种情况下我得到一个例外,我的理解是当表不存在或为空时它返回0。
我想问的另一个问题,虽然只是提供信息:在寻找表的解决方案存在问题之前,我想过运行SELECT * FROM tableName
查询,并且处理"表不存在& #34;错误SQL会把我当作例外。什么"粉碎"我的计划是SQLexception.getCause();返回null,而不是实际原因,我想是"表或视图不存在"或类似的东西。尽管如此,这是否是检查存在的有效方法?也就是说,我对SELECT COUNT(*)FROM tableName方法以外的建议持开放态度,如果这是不正确/无效的,那么这些建议可以用于我想做的事情。
提前致谢LukeSykpe
答案 0 :(得分:1)
这样的事情应该适用于Oracle:
public static boolean doesTableExist(Connection con, String tableName) throws SQLException {
ResultSet rs = null;
PreparedStatement stm = con.prepareStatement("SELECT * FROM user_objects WHERE object_type = 'TABLE' and object_name=?");
stm.setString(1,tableName.toUpperCase()); //case sensitive
rs = stm.executeQuery();
if(rs.next()) {
return true;
}
return false;
}
注意:如果表存在,则返回true,无论它是否为空。