我正在使用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环境变量上。
答案 0 :(得分:0)
当Classl¡Loader
无法找到所需的类时,会抛出此问题。
这可能是由两个问题造成的:
a)您要搜索的类不在JAR文件中(您可以检查它是否解压缩jar)。
b)你没有使用你认为的CLASSPATH。
你能确定ClassLoader使用的CLASSPATH与你设置的相同吗?
在How to get the path of running java program中,您可以找到如何获取正在运行的JVM实例的当前CLASSPATH。