Netbeans中SQLite的JDBC:没有找到合适的驱动程序



我需要将数据从SQLite文件加载到我在Netbeans中开发的java程序中。该文件将通过一个swing菜单项加载。我使用sqlitejdbc作为驱动程序。

下面是我认为很重要的代码块:

// 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)驱动程序不存在加载。这里有一些进一步的信息:

    我通过Tools -> Libraries将sqlitejdb -3.7.2.jar添加到库类路径中,并通过Window -> Projects将sqlitejdb -3.7.2.jar添加到项目库中。
  • 我还使用这个函数检查了类路径。它包含了jdbc jar文件的路径。
  • 我可以通过Services菜单连接到数据库,没有任何问题,所以我可以假设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);
}
//...

您可能需要加载驱动类,以便它使用以下代码将自己注册到DriverManager:forname("org.sqlite.JDBC");

注意:这只需要在应用程序中调用一次。

在Java包含ServiceLoader API之前,这是一个标准的过程,现在DriverManager使用该API来注册它在类路径中找到的驱动程序,但是驱动程序需要声明一个名为Java .sql. driver的文件,其中包含其jar的META-INFservices目录下的驱动程序类的名称。

相关内容

  • 没有找到相关文章

最新更新