簡體   English   中英

Sqlite can't connect to database from inside jar: NullPointerException ClassNotFoundException: org.sqlite.JDBC

[英]Sqlite can't connect to database from inside jar: NullPointerException ClassNotFoundException: org.sqlite.JDBC

我的連接代碼:

private Connection connect(String dbpath)  {
        try  {
            Connection conn;
            Class.forName("org.sqlite.JDBC");

            conn = DriverManager.getConnection("jdbc:sqlite:" +
                    dbpath + ".db");
            System.out.println("Good!");
            return conn;
        }  catch (Exception e)  {
            System.out.println("Error!");
            return null;
        }
    }
dbpath = /home/username/stuff.db

當我從 Idea Intellij 運行時它運行正常,但是當我在 jar 中運行 package 時它失敗了。

編輯:

這是堆棧跟蹤中更多的錯誤:

ClassNotFoundException: org.sqlite.JDBC

 } catch (Exception e) { System.out.println("Error;"); return null; }

這是一個“醫生,當我反復用這把錘子砸我的臉時很痛”的問題。

別那樣做。

處理錯誤的正確方法是處理它(記錄它,而不是處理它)。 下一個最好的方法是繼續拋出異常(在這里,將throws SQLException添加到您的方法簽名中。對於旨在連接到數據庫的方法來說,這樣做是完全明智的)。 如果你也不能這樣做,正確的處理程序是throw new RuntimeException("Uncaught", e); - 因為你的方式,好吧,導致不再提供你需要的信息的例外。 你扔掉了所有有趣的部分。 很可能該 db 路徑不存在(您位於不同的目錄中),或者 CLass.forName 調用失敗,因為您的依賴關系已損壞。

通常,異常會准確地告訴您這兩種情況中的哪一種是問題所在。

但是,因為你寫了我上面展示的片段,現在你沒有。 因此,證明該片段是不好的。 不過,解決方案很簡單。 不要再寫那樣的代碼了:)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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