Java& SQLite - 另一个ClassNotFoundexception

时间:2013-12-17 13:40:22

标签: java sqlite exception classpath classnotfound

我正在使用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环境变量上。

1 个答案:

答案 0 :(得分:0)

Classl¡Loader无法找到所需的类时,会抛出此问题。

这可能是由两个问题造成的:

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

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

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

How to get the path of running java program中,您可以找到如何获取正在运行的JVM实例的当前CLASSPATH。