2013-07-30 72 views
0

我正在寫一個Java程序,它需要加載本地SQLite數據庫。一切工作如預期,直到我打包並在另一臺計算機上嘗試它。數據庫查詢似乎是唯一的問題。嘗試返回「找不到適用於jdbc:sqlite:C:\ Data \ Test.db的合適驅動程序」。該錯誤使我認爲它正在訪問SQL類,但沒有正確加載驅動程序本身。SQLite無法從Jar連接到數據庫

String db_string = "C:\Data\Test.db"; 
try{ 
    connection = DriverManager.getConnection("jdbc:sqlite:" + db_string); 
    Statement statement = connection.createStatement(); 
    statement.setQueryTimeout(30); // 30 seconds 
    ResultSet rs = statement.executeQuery("select * from " + table); 
    while(rs.next()){ 
     // Read the results 
     fileList.add(rs.getLong("modifieddate")); 
    } 
} catch (SQLException e){ 
    System.err.println(e.getMessage()); 
} 
// Close the connection 
finally { 
    try{ 
     if(connection != null) 
      connection.close(); 
    } catch (SQLException e){ 
     System.err.println(e); 
    } 
} 

在的IntelliJ我已經通過創建一個新的神器生成JAR和指定主類。我用來讀/寫數據庫信息的SQLite包被IntelliJ提取到Jar中。當我打開Jar時,我可以看到我的代碼和SQLite代碼及其JDBC驅動程序。

Manifest-Version: 1.0 
Main-Class: com.myproject 

我試過的其他計算機上運行的是Windows 8和Windows 7,它們都給出相同的錯誤。

什麼可能是錯的?

回答

1

您沒有通過調用Class.forName(...)加載驅動程序類的靜態初始化程序,並且由於您重新打包了JAR,因此可能不包括自動檢測驅動程序類所需的SPI清單。

要麼手動調用驅動程序,要麼將原始SQLite驅動程序JAR添加到類路徑中,而不是將其捆綁到單個JAR中。

+0

確實是這個問題。我曾經在另一堂課中使用過它,但在另一堂課中卻忘記了。我沒有意識到它超出了範圍。謝謝! – Jeremy