ClassNotFoundException with PostgreSQL and JDBC

岁酱吖の 提交于 2019-12-17 06:18:25

问题


I am having some difficulty in making connectivity with Java and PostgreSQL Database.I have download the JDBC4 Postgresql Driver, Version 9.2-1002 driver and properly set the application ClassPath. My code is as under

import java.sql.*;

public class JavaPostGreSQLConnectivity
{
    public static void main(String[] args) 
    {
        DB db = new DB();        
        db.dbConnect("jdbc:postgresql://127.0.0.1:5432/TestDB", "postgres","pwd");
    }
}

class DB
{
    public DB() {}

    public void dbConnect(String db_connect_string, String db_userid, String db_password)
    {
        try
        { 
            Class.forName("org.postgresql.Driver");
            Connection conn = DriverManager.getConnection(db_connect_string, db_userid, db_password);
            System.out.println("connected");

        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }
};

Upon running I am getting the below error

Is it complaining about

Class.forName("org.postgresql.Driver");

If so then what will be the driver name? However, I followed this for my learning purpose.

However, If I do

C:\Program Files (x86)\Java\jdk1.7.0\bin>java -cp C:\Users\pos
tgresql-9.2-1002.jdbc4.jar; JavaPostGreSQLConnectivity

connected

It works.Why I need to explicitly mention the driver again when I have already placed it in the classpath properly? Is there any alternative way (I just want to put the JAR file in Classpath and the program should read from there)?

Thanks in advance


回答1:


The driver name is OK. It is the same as mentioned in the official docs of the driver. Therefore the driver is just not in the classpath.

You say:

I [...] properly set the application ClassPath

On the other hand you start the program by just calling:

java JavaPostGreSQLConnectivity

In that case no PG driver is on the classpath. You have to add it by hand using someting like

java -cp postgresql-jdbc4.jar JavaPostGreSQLConnectivity

EDIT The question has been changed while typing, hence the duplication.

You added the jar only in you IDE. This helps the IDE to compile your code. If you start the program using you IDE then the IDE will also set the classpath for you. But if you don't start via the IDE then nobody knows the correct classpath and it has to be set by hand.

Your options are:

  • start always via IDE
  • make some batch script which hides the setting of the classpath (common solution)
  • set the CLASSPATH environment variable (does not scale with other Java applications)
  • make an "Executable Jar" and set the classpath there. (Search this site using that term).
  • put the jar into a place where the JVM picks it up automatically (e.g. in the lib/ext directory of the JRE). But polluting the JRE/JDK libs is the worst option.

Note: This is all basic Java knowledge and has nothing to do with PostgreSQL.



来源:https://stackoverflow.com/questions/13891492/classnotfoundexception-with-postgresql-and-jdbc

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!