SQL 在 java 和 运行 时查询 returns 不同的结果

SQL Query returns different results in java and when ran

我正在尝试编写一种方法来检查 table 是否存在于我的数据库中,在 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。 另外,如果 table 实际上不存在,这个查询 return 0 不应该吗?在这种情况下我得到一个例外,我的理解是 returns 0 当 table 不存在或为空时。

我想问的另一个问题,尽管只是提供信息:在寻找 table 存在问题的解决方案之前,我想到了 运行 一个 SELECT * FROM tableName 查询,并处理 "table does not exist" 错误 SQL 会将我作为异常抛出。 "crushed" 我的计划是 SQLexception.getCause(); returns null,而不是实际原因,我想应该是 "table or view does not exist",或类似的东西。尽管如此,这是否是检查是否存在的有效方法?也就是说,除了 SELECT COUNT(*) FROM tableName 方法之外,我愿意接受其他建议,如果这是 incorrect/ineffective,那将对我想做的事情有效。

提前致谢,LukeSykpe

像这样的东西应该适用于 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;
}

注意:如果 table 存在,这将 return 为真,无论它是否为空。