0

我正在使用 Eclipse(在 Windows 8.1 上运行)并希望访问 sqlite 数据库。遗憾的是,即使我在 CLASSPATH 环境变量中定义了它的位置,我也无法使用该驱动程序。以下程序来自一千个教程站点之一:

package sqliteconnectiontest;

import java.sql.Connection;
import java.sql.Statement;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.ResultSetMetaData;
import java.sql.DatabaseMetaData;

public class test {
public static void main(String[] args) throws Exception {
    // register the driver
    String sDriverName = "org.sqlite.JDBC";
    Class.forName(sDriverName);

    // now we set up a set of fairly basic string variables to use in the
    // body of the code proper
    String sTempDb = "hello.db";
    String sJdbc = "jdbc:sqlite";
    String sDbUrl = sJdbc + ":" + sTempDb;
    // which will produce a legitimate Url for SqlLite JDBC :
    // jdbc:sqlite:hello.db
    int iTimeout = 30;
    String sMakeTable = "CREATE TABLE dummy (id numeric, response text)";
    String sMakeInsert = "INSERT INTO dummy VALUES(1,'Hello from the database')";
    String sMakeSelect = "SELECT response from dummy";

    // create a database connection
    System.out.println(sDbUrl);
    Connection conn = DriverManager.getConnection(sDbUrl);
    try {
        Statement stmt = conn.createStatement();
        try {
            stmt.setQueryTimeout(iTimeout); 
            stmt.executeUpdate(sMakeTable);
            stmt.executeUpdate(sMakeInsert);
            ResultSet rs = stmt.executeQuery(sMakeSelect);
            try {
                while (rs.next()) {
                    String sResult = rs.getString("response");
                    System.out.println(sResult);
                }
            } finally {
                try {
                    rs.close();
                } catch (Exception ignore) {
                }
            }
        } finally {
            try {
                stmt.close();
            } catch (Exception ignore) {
            }
        }
    } finally {
        try {
            conn.close();
        } catch (Exception ignore) {
        }
    }
}
}

我已经从http://www.xerial.org/maven/repository/artifact/org/xerial/sqlite-jdbc/3.7.2/下载了 sqlite-jdbc-3.7.2.jar 驱动程序

驱动程序位于:

B:\sqlite-jdbc-3.7.2.jar

我的 .class 文件:

B:\Progs\Java\sqlconnectiontest\bin\sqliteconnectiontest\test.class

CLASSPATH 环境变量:

CLASSPATH=B:\sqlite-jdbc-3.7.2.jar;

当我尝试执行程序时,会抛出此异常:

Exception in thread "main" java.lang.ClassNotFoundException: org.sqlite.JDBC
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.net.URLClassLoader$1.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
    at java.lang.ClassLoader.loadClass(Unknown Source)
    at java.lang.Class.forName0(Native Method)
    at java.lang.Class.forName(Unknown Source)
    at sqliteconnectiontest.test.main(test.java:14)

从我在互联网上发现的情况来看,这个问题应该意味着找不到 JDBC 驱动程序,尽管我将它的方向放在 CLASSPATH 环境变量上。

4

1 回答 1

0

Classl¡Loader当无法找到所需的类时会引发此问题。

这可能是由两个问题引起的:

a)您要搜索的类不在 JAR 文件中(您可以检查它解压缩 jar)。

b)您没有使用您认为的 CLASSPATH。

您能确定 ClassLoader 使用的 CLASSPATH 与您设置的相同吗?

如何获取运行 java 程序的路径中,您可以找到如何获取正在运行的 JVM 实例的当前 CLASSPATH。

于 2013-12-17T13:51:08.977 回答