java - 在Windows中使用ORMLite for SQLite成功,但在Mac中失败

标签 java jdbc ormlite

我已经实现了一个应用程序,当我在 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/

相关文章:

java - 使用 Spring JPA 查询过滤数据

java - ORMLite 查询国外集合

java - 将对象列表保存到 ORMLite 数据库

android - 如何在 sqlite 中重置自动增量序列号

java - 如何使用类似 MS Access 的目录路径连接 MySQL 数据库文件 (.sql)?

java - 这个Android studio警告会导致将来出现任何错误吗?(是否应该考虑进行故障排除?)

java - 创建表时出错

java - JDBC + PL/SQL = 这么简单,还是有陷阱?

java - 如何检查查询是否影响了 Java Netbeans Oracle 中的行

java - Web 服务 Glassfish 中的 JDBC