2014-06-22 165 views
3

我需要從一個SQLite文件加載數據到我在Netbeans中開發的Java程序。 該文件將通過擺動菜單項加載。我使用sqlitejdbc作爲驅動程序。JDBC SQLite的Netbeans中:沒有合適的驅動程序找到

這裏是代碼塊我認爲是重要的:

// header stuff 
package aufgabe_9; 

import java.sql.*; 

//... 

// menu item opening the file 
private void mitemOpenFileActionPerformed(java.awt.event.ActionEvent evt) 
{            

    /** 
    * Handles the dialogue for selecting and loading file. 
    */ 
    JFileChooser fileChoose = new JFileChooser(); 
    fileChoose.showOpenDialog(this); //'this' calls the current object 

    //Load the sql file 
    try { 
     String filePath = fileChoose.getSelectedFile().toString(); 
     Connection conn = DriverManager.getConnection("jdbc:sqlite:" + 
        filePath); 

     //Close the connection 
     if (conn != null) 
      conn.close(); 

    } 


    catch (SQLException e){System.err.println("Database problem: " + e);} 
    }         
} 

//... 

當運行程序,並通過菜單加載一個文件,我得到以下錯誤:

java.sql.SQLException: No suitable driver found for jdbc:sqlite:/home/levent 
/temp/A9AProbeflaeche.db 

看完後各自stackexchange帖子,我明白這 問題可以通過(1)格式錯誤的文件的URL或(2)駕駛員不是 加載引起。下面是一些更多的信息:

  • 我通過工具添加sqlitejdbc-3.7.2.jar圖書館類路徑 - 通過窗口>庫以及對項目庫 - >項目
  • 我也用this function檢查類路徑。它包含正如預期的jdbc jar文件的路徑。
  • 我可以通過服務菜單連接到數據庫,沒有任何問題,所以我可以假設URL是正確的,以及我的系統上運行的sqlite的。
  • 一些操作系統信息:我在64位ARCH Linux 3.12.9-2上運行Netbeans 8.0。

誰能告訴我什麼,我在這裏失蹤?任何幫助感謝!

問題解決 下面是對我的作品的代碼:

//... 
private void mitemOpenFileActionPerformed(java.awt.event.ActionEvent evt) 
{            

    /** 
    * Handles the dialogue for selecting and loading file. 
    */ 
    JFileChooser fileChoose = new JFileChooser(); 
    fileChoose.showOpenDialog(this); 

    //Load the sql file 
    try { 
     //Get file path 
     String filePath = fileChoose.getSelectedFile().toString(); 

     //Open connection 
     Class.forName("org.sqlite.JDBC"); 
     Connection conn = DriverManager.getConnection("jdbc:sqlite:" + filePath); 

     //Do stuff...      

     //Close the connection 
     conn.close(); 

    } 

    //"Multicatch": 
    catch (SQLException | ClassNotFoundException e) { 
    System.err.println("Database problem: " + e); 
} 
//... 

回答

1

你可能需要使其使用下面的代碼將自己註冊到DriverManager將加載驅動程序類: 的Class.forName ( 「org.sqlite.JDBC」);

注:此只需要在你的應用程序調用一次。

這是在Java包含ServiceLoader API之前的標準過程,現在DriverManager使用該API來註冊它在類路徑中找到的驅動程序,但驅動程序需要聲明名爲java.sql.Driver的文件,其中包含名稱在他們jar的目錄META-INF \ services中的驅動程序類。

+0

該死的挺直,非常感謝!我實際上在不同的帖子中閱讀了'Class.forName()'語句,但當時仍然有錯誤,可能是因爲URL格式不正確。另外,由於'DriverManager'的處理,我認爲它已經過時了。它現在完美。 –

相關問題