我正在编写一个需要加载本地SQLite数据库的java程序。一切都按预期工作,直到我打包并在另一台计算机上尝试。数据库查询似乎是唯一的问题。尝试返回“找不到合适的jdbc驱动程序:sqlite:C:\ Data \ Test.db”。该错误使我认为它正在访问SQL类,但没有正确加载驱动程序。
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.它们都会出现同样的错误。
可能出现什么问题?
答案 0 :(得分:1)
您没有通过调用Class.forName(...)
来加载驱动程序类的静态初始化程序,并且由于您重新打包了JAR,因此可能不会包含自动检测驱动程序类所需的SPI清单。
手动调用驱动程序或将原始SQLite驱动程序JAR添加到类路径中,而不是将其捆绑到单个JAR中。