![](/img/trans.png)
[英]Firebase checking if exists returns false where it should return true
[英]Testing to see if view exists, but my method returns false - it should return true
我有一個方法viewExists
來檢查我的數據庫中是否有視圖。 目前我知道,但我的方法似乎不知道這一點,因為它不斷返回 false。
public static boolean viewExists(Connection conn, String view) throws SQLException {
boolean exists = false;
try {
ResultSet rs = conn.getMetaData().getTables(null, null, view, new String[] {"VIEW"});
if (rs.next()) {
String name = rs.getString("TABLE_NAME");
if (name != null && name.contentEquals(view)) {
exists = true;
}
}
} catch (SQLException e) {
e.printStackTrace();
}
return exists;
}
這樣做的全部意義在於查看視圖是否存在,如果存在,我將其刪除並創建一個新視圖。
我對 JDBC 還很陌生,所以任何幫助都將不勝感激。
正如 Turing86 的評論所說,像這樣在原始 JDBC 中創建動態表是......重新發明輪子,你可能不應該這樣做。
雖然在 SQL db 名稱中不區分大小寫,但在使用 JDBC 元數據時它們不是,並且您需要的大小寫相當煩人地取決於數據庫引擎。 很可能你想要'view'而不是'VIEW'或'table_name'而不是TABLE_NAME。
單獨說明一下,這真是愚蠢的錯誤處理; 異常包含 4 位信息(類型、消息、跟蹤和原因),您將丟棄 4 個事實中的 3 個,將剩余信息轉儲到會被噪音淹沒的地方,然后返回一個錯誤的答案。 可怕。 只需刪除 try 塊並將throws SQLException
添加到您的代碼中:對於檢查表是否存在的方法來說, throws SQLException
它是完全合理的(並一直添加直到 main 的throws
子句,除非您確實有一些代碼處理異常,並且“打印它們”或“記錄它們”或“忽略它們”不處理它)。
我還會打印每個結果,以防萬一“VIEW”正確但“TABLE_NAME”不正確。
如果您無法弄清楚,請刪除 VIEW 並使其為空,在這種情況下,您會得到所有內容,這太多了,但是打印相關部分,您將從那里為您的數據庫引擎找出正確的名稱.
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.