2013-10-07 140 views
2

我正在尝试为Java程序加载JDBC postgreSQL驱动程序。我知道这是遍布互联网。我尝试了很多解决方案,但他们都没有为我工作。加载postgreSQL JDBC驱动程序

的问题是,我得到这个错误:

Exception in thread "main" java.lang.NoClassDefFoundError:  
classes/com/freire/test/JDBCExample/class 
Caused by: java.lang.ClassNotFoundException: classes.com.freire.test.JDBCExample.class 
at java.net.URLClassLoader$1.run(URLClassLoader.java:202) 
at java.security.AccessController.doPrivileged(Native Method) 
at java.net.URLClassLoader.findClass(URLClassLoader.java:190) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:306) 
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301) 
at java.lang.ClassLoader.loadClass(ClassLoader.java:247) 

我的代码如下所示:

package com.freire.test; 
import java.sql.DriverManager; 
import java.sql.Connection; 
import java.sql.SQLException; 

public class JDBCExample 
{ 
    public static void main(String[] argv) 
    { 
     System.out.println("JDBC Connection Testing"); 
     try { 
      Class.forName("org.postgresql.Driver"); 
     } catch (ClassNotFoundException e) { 
      System.out.println("PostgreSQL JDBC Driver not included!"); 
     } 
    } 
} 

而且我的项目的结构是这样的:

myProject 
src 
    com 
    freire 
     test 
     JDBCExample.java 
classes 
    com 
    freire 
     test 
     JDBCExample.class 
lib 
    postgresql-9.2-1003.jdbc3.jar 

编译工作正常:

java -d classes/ src/com/freire/test/JDBCExample.java 

但执行产生错误:

java classes/com/freire/test/JDBCExample 

值得一说,我在OS X山狮的工作。

任何帮助将不胜感激。

+0

当您编译和运行程序时,您需要确保'postgresql-9.2-1003.jdbc3.jar'在类路径中 – MadProgrammer

回答

4

首先,你需要使用.提包名称,而不是/运行Java程序时:

转到你的类目录并运行JDBCExample为:

java com.freire.test.JDBCExample 

但现在哭postgres驱动程序类没有找到,因为postgres jar在类路径中缺少。因此,您需要在运行程序时使用classpath选项并将您的postgres jar添加到类路径中:

和对于Windows:

java -cp .;../lib/postgresql-9.2-1003.jdbc3.jar com.freire.test.JDBCExample 

对于Linux:

java -cp .:../lib/postgresql-9.2-1003.jdbc3.jar com.freire.test.JDBCExample 
+0

我一直在尝试这样做,但未成功很长一段时间。我怎样才能做到这一点? – ivantxo

+0

@ivantxo我在我的回答中提到了一切。只要使用我答案中提到的最后一个选项,你应该很好。 –

+0

谢谢,但这给了我一个java命令的用法选项列表。然后,几行postgres-9.2.jdbc3.jar错误,如下所示:../lib/postgresql-9.2-1003.jdbc3.jar:第1行:未找到PK:命令或../lib/postgresql-9.2- 1003.jdbc3.jar:命令替换:第9行:语法错误:文件意外结束 – ivantxo

0

您需要确保PostgreSQL的-9.2-1003.jdbc3.jar是类路径中,当你编译和运行程序

尝试使用

javac -cp lib/postgresql-9.2-1003.jdbc3.jar -d classes/ src/com/freire/test/JDBCExample.java 

编译应用程序和

java -cp lib/postgresql-9.2-1003.jdbc3.jar;./classes com.freire.test.JDBCExample 

运行它...

NB作为Juned指出,从技术上讲,你不需要在类路径中lib/postgresql-9.2-1003.jdbc3.jar引用,但考虑如何纳入编译时依赖的示范并发症进程内)

+0

由于驱动程序类仅在运行时加载,所以在编译期间不需要jar。 –

+0

@JunedAhsan这将会如何? (是的,你是对的......认为这是一个扩展练习汇编;)) – MadProgrammer

+0

它不会伤害,这就是为什么我没有伤害你的负面投票;-) –

1

在Linux执行以下操作:

的javac -cp ':PostgreSQL的-9.1-901.jdbc4.jar' postgresjavatest.java

java -cp'。:postgresql-9.1-901.jdbc4。jar'postgresjavatest

它会为您的jdbc驱动程序。确保jar文件位于同一位置