【发布时间】:2016-09-05 17:54:13
【问题描述】:
我正在尝试用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 查询,并处理 SQL 会抛出的“表不存在”错误我是个例外。什么“粉碎”了我的计划是 SQLexception.getCause();返回 null,而不是实际原因,我想这将是“表或视图不存在”或类似的东西。尽管如此,这会是检查存在的有效方法吗?也就是说,我愿意接受除 SELECT COUNT(*) FROM tableName 方法以外的其他建议,如果这是不正确/无效的,那么这些建议适用于我想做的事情。
提前致谢,LukeSykpe
【问题讨论】:
-
您可以使用
DatabaseMetaData获取有关架构的信息(包括表名)。您无法从不存在的表中获得计数,因此建议的解决方案完全是垃圾。 -
你确定你和同一个用户连接到同一个数据库,或者至少查看同一个模式?您最近是否创建并填充了表,如果是,您是否提交了插入? (另外,你为什么看
getCause()而不是getErrorCode()?) -
感谢您的回答。正如我所说,我完全是新手。您将不得不详细说明,我如何确定DatabaseMetaData中是否存在表?
-
在 Oracle 上,您可以使用字典视图检查表是否存在 -SELECT TABLE_NAME FROM USER_TABLES WHERE TABLE_NAME='CITIES'
-
查看stackoverflow.com/a/2942795/984823 更好的数据库独立答案和完整代码。
标签: java oracle oracle-sqldeveloper