SQL Query在运行时返回不同的结果

时间:2016-05-10 16:11:25

标签: java oracle oracle-sqldeveloper

我正在尝试编写一个方法来检查我的数据库中是否存在表,在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

1 个答案:

答案 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,无论它是否为空。