我想寫一個方法來檢查我的數據庫中是否存在一個表,在java中。一些四處張望後,我發現一個答案,說我需要運行SELECT COUNT(*)FROM tableName;這樣做,所以我寫了下面的代碼。SQL查詢返回不同的結果在java和運行時
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'獲取有關架構的信息(包括表名稱)。你不能從一個不存在的表中計數,所以建議的解決方案是完全垃圾。 – Kayaman
你確定你是連接到相同的數據庫作爲同一個用戶,或至少看相同的模式?你最近是否創建並填充了表格,如果有,是否提交了插入內容? (另外,你爲什麼要看'getCause()'而不是''getErrorCode()'](https://docs.oracle.com/javase/7/docs/api/java/sql/SQLException)。 html#getErrorCode())?) –
謝謝你的回答。正如我所說,我是一個完全新手。你將不得不詳細說明,我如何知道DatabaseMetaData中是否存在表? –