简体   繁体   中英

Loading the postgreSQL JDBC driver

I am trying to load a JDBC postgreSQL driver for a Java program. I know this is all over the Internet. I have tried many solutions, but none of them have worked for me.

The problem is that I get this error:

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)

And my code looks like this:

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!");
        }
    }
}

And the structure of my project looks like this:

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

Compiling works fine:

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

But executing produces the error:

java classes/com/freire/test/JDBCExample

Worth to say that I am working on a OS X Mountain Lion.

Any help will be appreciated.

Firstly you need to mention the package names using . instead of / while running the java program:

Go to your classes directory and run JDBCExample as :

java com.freire.test.JDBCExample

But it will now cry for the postgres driver class not found because postgres jar is missing in the classpath.So you need to use the classpath option while running the program and add your postgres jar to the classpath:

for windows:

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

for linux:

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

On Linux execute following:

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

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

It will jdbc drivers for you. make sure jar file is on same location

You need to ensure that the postgresql-9.2-1003.jdbc3.jar is within the class path when you compile and run the program

Try using

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

to compile the application and

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

to run it...

nb As Juned has pointed, technically, you don't need the lib/postgresql-9.2-1003.jdbc3.jar references in the classpath, but consider it an demonstration of how to included compile time dependencies within the complication process ;)

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM