【问题标题】:java.lang.ClassNotFoundException: org.sqlite.JDBC error in Sample.java program from xerialjava.lang.ClassNotFoundException:来自 xerial 的 Sample.java 程序中的 org.sqlite.JDBC 错误
【发布时间】:2021-05-28 03:19:17
【问题描述】:

我试图让 Xerial 的 Sample 类在 Eclipse 中使用 sqlite 工作,但我不断收到错误“ClassNotFoundException: org.sqlite.JDBC”

我从https://bitbucket.org/xerial/sqlite-jdbc/downloads 下载了 sqlite-jdbc-3.7.2.jar 文件。在eclipse中将它复制到我的项目“database_test”下的lib文件夹中。然后右击Project->Properties->Java Build Path->Libraries Tab->Add JARs->选择jar文件。我正在尝试从此处找到的 Xerial 执行此代码:https://bitbucket.org/xerial/sqlite-jdbc#markdown-header-usage

// load the sqlite-JDBC driver using the current class loader
Class.forName("org.sqlite.JDBC");

Connection connection = null;
try
{
  // create a database connection
  connection = DriverManager.getConnection("jdbc:sqlite:sample.db");
  Statement statement = connection.createStatement();
  statement.setQueryTimeout(30);  // set timeout to 30 sec.

  statement.executeUpdate("drop table if exists person");
  statement.executeUpdate("create table person (id integer, name string)");
  statement.executeUpdate("insert into person values(1, 'leo')");
  statement.executeUpdate("insert into person values(2, 'yui')");
  ResultSet rs = statement.executeQuery("select * from person");
  while(rs.next())
  {
    // read the result set
    System.out.println("name = " + rs.getString("name"));
    System.out.println("id = " + rs.getInt("id"));
  }
}
catch(SQLException e)
{
  // if the error message is "out of memory", 
  // it probably means no database file is found
  System.err.println(e.getMessage());
}
finally
{
  try
  {
    if(connection != null)
      connection.close();
  }
  catch(SQLException e)
  {
    // connection close failed.
    System.err.println(e);
  }
}

} }

我去过的每个网站都说将 jar 文件添加到您的构建路径或类路径中,我相信我已经做到了,但没有任何解决问题的方法。任何帮助,将不胜感激。谢谢。

【问题讨论】:

  • 假设您使用的是 Eclipse 或 Netbeans - 如果 DriverManager.getConnection() 没有红色下划线(未找到类/方法)并且程序编译正常,那么它(几乎)可以安全地假设您正确导入 * .jar 文件。您可以尝试在左侧的 Files/Projects 窗口中展开 libs 文件夹,然后挖掘到 sqlite-jdbc-3.7.2.jar-文件并查看 org->sqlite-> JDBC 存在。
  • 感谢您的回复。我正在使用 Eclipse,我打开了从 Xerial 下载的 jar 文件,文件夹结构 org/sqlite/JDBC.class 和 org/sqlite/JDBC.java 都存在于 JAR 文件中。运行 javac Sample.java 不会返回错误。 Eclipse 中也没有任何红色下划线...
  • 您是在 IDE 中运行程序还是将其编译为 .jar 并通过控制台运行?编辑:我还记得 Eclipse 也为您提供Add external JARs(虽然我有一段时间没有使用 Eclipse)-您也可以尝试一下,它应该使用库的完整路径而不是项目根目录的相对路径目录。
  • 我也尝试了“添加外部 JAR”。我可能正在错误地编译/运行它。我首先尝试简单地在控制台上运行它: javac Sample.java -> java Sample... 并导致错误。在 Eclipse 中运行它只会导致 Eclipse 中的控制台窗口显示“SQLite Java Application”。除了将 JAR 文件复制到我的 lib 文件夹并将其添加到构建路径之外,我是否需要对 JAR 文件执行其他任何操作?
  • 当您使用javacSample.java 编译成Sample.class 时,您必须确保包含sqlite-jdbc-3.7.2.jarlib 路径相对于Sample.class。尝试创建一个文件夹"MyProgram",将Sample.class 放入该文件夹包含sql-connector 的lib 文件夹;你应该有类似MyProgram/Sample.classMyProgram/lib/sqlite-jdbc-3.7.2.jar 的东西。然后尝试通过控制台运行它。

标签: java sqlite


【解决方案1】:

感谢用户 phew 的帮助/想法。

我错过了明显的command line instructions on Xerial's site for the Sample program。为了让程序从命令行运行,我必须将 JAR 文件复制到与 .CLASS 文件相同的文件夹中。然后运行以下命令:

java -classpath ".:sqlite-jdbc-(VERSION).jar" Sample

引号内是多条路径,在 Unix 下用冒号 (:) 分隔,在 Windows 下用分号 (;) 分隔。点作为路径之一很重要 - 仅命名 JAR 文件是不够的。在 Windows 上的完整调用是:

"%JAVA_HOME%\bin\java.exe" -cp "sqlite-jdbc-(VERSION).jar;." Sample

注意分号而不是冒号。路径的顺序并不重要,-cp-classpath 的作用相同,只是更短。

【讨论】:

  • 如果你使用的是windows而不是linux,你应该使用“;”而不是类路径中的“:”。
【解决方案2】:

您可以通过将您的项目转换为 maven 并将依赖项(从 https://mvnrepository.com)转换为您的 pom.xml 来添加它:

</dependency>
    <!-- https://mvnrepository.com/artifact/org.xerial/sqlite-jdbc -->
    <dependency>
        <groupId>org.xerial</groupId>
        <artifactId>sqlite-jdbc</artifactId>
        <version>3.34.0</version>
    </dependency>

【讨论】:

    【解决方案3】:

    当您处理桌面 JAVA 应用程序时,上述所有解决方案都可以正常工作。 对于 WebAPP 应用程序,上述解决方案将不起作用。 实际上是你的应用服务器的问题,就是你需要在你的WEB-INF/lib下添加sqlite-jar,然后你才能成功运行你的webapp。

    为此,您可以按照以下步骤操作:

    转到:

    项目-> 属性-> 部署程序集-> 添加-> 从文件系统存档-> 下一步-> 添加

    导航到您拥有 sqlite-jar 的文件夹,选择它并点击 OK。

    单击完成。 好的。

    完成,您现在应该可以运行您的应用了。

    谢谢

    【讨论】:

      【解决方案4】:

      对我有用的一种方法是转到 JRE 系统库 -> 右键单击​​ -> 构建路径 -> 配置构建路径 -> 添加外部 jars -> 选择 jar 并编译。

      【讨论】:

        【解决方案5】:

        首先你可以下载sqlite-jdbc-3.8.11.2,然后在你的项目中添加jar文件

        Window > Show_view > Package Explorer
        
        step-1: right click on referenced libraries
        step-2: select Built path
        step-3: configure Built path
        step-4: Add External jars file
        step-5: add sqlite-jdbc-3.8.11.2
        step-6: ok
        

        或第二种有用的方法


        你的项目可以设置Classpath:Lib/sqlite-jdbc-3.8.11.2.jar

        1)create a folder "Lib" in your project workspace 
        2)"Lib" folder paste jar file like "sqlite-jdbc-3.8.11.2.jar"
        3)After Double click on your project file i.e. 'MANIFEST.MF'
        4)select Runtime(Bottom view panel) 
        5)plug-in Classpath(Bottom_right position) to add jar file like "Lib/sqlite-jdbc-3.8.11.2.jar"
        
        this working 100% sure..thanks
        

        【讨论】:

          【解决方案6】:

          如前所述,将 jar 文件添加到您的项目中。

          对于 Android Studio / IntelliJ,您只需这样做:

          文件 > 项目结构 >

          新模块 >

          导入 .JAR/.AAR 包

          现在选择/添加您的 .jar 文件,让 IntelliJ 完成剩下的工作。

          【讨论】:

            【解决方案7】:

            第 1 步:

            复制 sqlite 库。


            第 2 步:

            将库粘贴到“WebContent/WEB-INF/lib”目录中,您也可以通过在 Eclipse 中选择“lib”文件夹并按 Ctrl + V

            第 3 步:

            重新启动服务器,希望问题应该得到解决

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 2018-09-11
              • 2014-11-20
              • 1970-01-01
              • 2015-08-19
              • 1970-01-01
              • 2013-07-20
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多