我已经实现了一个应用程序,当我在 Windows 中编码时它可以工作。但同样的代码在 Mac 中给出了异常。我使用 SQLite 数据库并将 sqlite-jdbc-3.21.0.1.jar 作为库。
我知道驱动程序一切正常,因为我已经检查过如下:
public static void pureSqlite() throws Exception {
String url = "jdbc:sqlite:hadits-bukhari.sqlite";
Connection connection = DriverManager.getConnection(url);
System.out.println("Connection established.");
String sql = "SELECT * FROM hadits";
Statement statement = connection.createStatement();
ResultSet resultSet = statement.executeQuery(sql);
int i = 0;
while (resultSet.next()) {
if (i == 5) break;
System.out.println(resultSet.getInt("nomer")+". "+resultSet.getString("deskripsi"));
i++;
}
}
当我使用 Windows 计算机时,它运行良好。
然后,我用ORMLite的方式实现了它。创建具有所需注释的 Hadits 类。然后我有以下功能:
public static void withOrmLite() throws Exception {
Class.forName("org.sqlite.JDBC"); // even put this test
System.out.println("Frankly, class org.sqlite.JDBC is exists.");
Ilmu ilmu = new IlmuImpl();
List<Hadits> list = ilmu.findHadits("bukhari", "");
int i = 0;
for (Hadits item: list) {
if (i == 10) break;
System.out.println(item.number+". "+item.desc);
i++;
}
}
来自 IlmuImpl:
@Override
public List<Hadits> findHadits(String book, String keyword) throws Exception {
String dbHost = "jdbc:sqlite:hadits-"+book+".sqlite";
ConnectionSource connection = new JdbcConnectionSource(dbHost);
Dao<Hadits, Long> haditsDao = DaoManager.createDao(connection, Hadits.class);
List<Hadits> list;
if (keyword == null || keyword.trim().length() == 0) {
list = haditsDao.queryForEq("buku", book);
} else {
QueryBuilder<Hadits, Long> queryBuilder = haditsDao.queryBuilder();
queryBuilder.where().like("deskripsi", "%"+keyword+"%");
PreparedQuery<Hadits> preparedQuery = queryBuilder.prepare();
list = haditsDao.query(preparedQuery);
}
connection.close();
return list;
}
此代码在 Windows 中运行良好,但当我在 Mac 中使用相同的代码时失败,说:
Exception in thread "main" java.sql.SQLException: Driver class was not found for SQLite database. Missing jar with class org.sqlite.JDBC.
at com.j256.ormlite.misc.SqlExceptionUtil.create(SqlExceptionUtil.java:27)
at com.j256.ormlite.db.BaseDatabaseType.loadDriver(BaseDatabaseType.java:47)
at com.j256.ormlite.jdbc.JdbcConnectionSource.initialize(JdbcConnectionSource.java:137)
at com.j256.ormlite.jdbc.JdbcConnectionSource.<init>(JdbcConnectionSource.java:117)
at com.j256.ormlite.jdbc.JdbcConnectionSource.<init>(JdbcConnectionSource.java:59)
at ilmu.implementation.IlmuImpl.findHadits(IlmuImpl.java:17) <-- this is my class
...
Caused by: java.lang.ClassNotFoundException: org.sqlite.JDBC
...
可能出了什么问题?
最佳答案
Caused by: java.lang.ClassNotFoundException: org.sqlite.JDBC
异常(exception)是试图告诉你所有你需要知道的事情。尽管您说“将 sqlite-jdbc-3.21.0.1.jar 作为库”,但找不到 JDBC
类。这意味着您的类路径有问题。
该库尚未添加到正确的目录,或者尚未在 IDE、maven 或其他构建实用程序中正确识别为依赖项。如果您提供有关构建环境的更多详细信息,我可以提供有关调整依赖项的更多详细信息。
关于java - 在Windows中使用ORMLite for SQLite成功,但在Mac中失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49219249/