簡體   English   中英

測試視圖是否存在,但我的方法返回 false - 它應該返回 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM