无法加载SQLite JDBC驱动程序,任何想法?

问题描述:

所以我需要编写一个程序来访问和修改一个学校程序的SQLite数据库,并首先查看基础知识。现在,我正在看这个让我开始:link text。问题是,当我编译Test.java(网站上的示例代码),然后运行命令:无法加载SQLite JDBC驱动程序,任何想法?

java -cp .:sqlitejdbc-v056.jar Test 

喜欢它告诉我,我得到以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: Test 
Caused by: java.lang.ClassNotFoundException: Test 
    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.ClassLoader.loadClassInternal(Unknown Source) 
Could not find the main class: Test. Program will exit. 

Test.java,Test.class和sqlitejdbc-v056.jar都在同一个文件夹中,所以他们应该找到对方。有没有人知道我做错了什么?

正如异常消息所说,问题在于它无法找到类Test。所以问题不是找到SQLite,而是找到你的Test类。

只是猜测,但我想知道如何编译你的问题。在Test.java中,类是否属于一个包?如果是这样,您需要使用-d标志对其进行编译,以便将其放入相应的子目录中。

根据java.lang.NoClassDefFoundError: Test,在CLASSPATH中找不到Test类。但是你写了Test.class在当前目录中可用,所以我会猜测一些东西。实际上,我认为你没有使用正确的CLASSPATH分隔符(取决于平台),因此不能正确构建CLASSPATH。在Windows上,您应该使用;而不是:。如果发生这种情况是这种情况,你应该试试这个:

java -cp .;sqlitejdbc-v056.jar Test 

如果你是一个类Unix平台,忘了这个答案,问题是其他地方。

+1

良好的分析。类路径非常棘手。 – 2009-11-07 10:44:54

+0

非常感谢你解决了我的问题,非常感谢。 只是想知道,虽然,这是什么它们之间的区别:。 java命令; sqlitejdbc-v056.jar测试 java命令; sqlitejdbc-v056.jar的Test.class 因为当我把 “.class” 的最后,我得到错误。 谢谢。 – ManBeast 2009-11-07 17:23:21

+0

非常感谢你解决了我的问题,非常感谢。只是想知道,这两个命令之间有什么区别:“java -cp。; sqlitejdbc-v056.jar Test”然后是“java -cp。; sqlitejdbc-v056.jar Test.class”因为当我把“ .class“结尾,我得到错误。谢谢 – ManBeast 2009-11-07 17:24:24