【问题标题】:ClassNotFoundException with PostgreSQL and JDBCPostgreSQL 和 JDBC 的 ClassNotFoundException
【发布时间】:2012-12-03 05:03:37
【问题描述】:

我在连接 Java 和 PostgreSQL 数据库时遇到了一些困难。我已经下载了JDBC4 Postgresql Driver, Version 9.2-1002 驱动程序并正确设置了应用程序 ClassPath。我的代码如下

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();
        }
    }
};

运行时出现以下错误

是在抱怨吗

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

如果是这样,那么驱动程序名称是什么?但是,我出于学习目的关注了this

但是,如果我这样做了

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

connected

它有效。为什么我已经将驱动程序正确放置在类路径中时需要再次明确提及它?有没有其他方法(我只想将 JAR 文件放在 Classpath 中,程序应该从那里读取)?

提前致谢

【问题讨论】:

    标签: postgresql jdbc connection classnotfoundexception


    【解决方案1】:

    驱动程序名称正常。与驱动程序的official docs 中提到的相同。因此驱动程序只是不在类路径中。

    你说:

    我 [...] 正确设置了应用程序 ClassPath

    另一方面,您只需调用以下命令即可启动程序:

    java JavaPostGreSQLConnectivity
    

    在这种情况下,类路径中没有 PG 驱动程序。你必须使用类似的东西手动添加它

    java -cp postgresql-jdbc4.jar JavaPostGreSQLConnectivity
    

    编辑输入时问题已更改,因此出现重复。

    您仅在 IDE 中添加了 jar。这有助于 IDE 编译您的代码。如果您使用 IDE 启动程序,那么 IDE 也会为您设置类路径。但是,如果您不通过 IDE 启动,那么没有人知道正确的类路径,并且必须手动设置。

    您的选择是:

    • 始终通过 IDE 启动
    • 制作一些隐藏类路径设置的批处理脚本(常用解决方案)
    • 设置 CLASSPATH 环境变量(不与其他 Java 应用程序一起扩展)
    • 制作一个“可执行 Jar”并在那里设置类路径。 (使用该术语搜索此网站)。
    • 将 jar 放入 JVM 自动拾取的位置(例如,在 JRE 的 lib/ext 目录中)。但是污染 JRE/JDK 库是最糟糕的选择。

    注意:这都是Java基础知识,与PostgreSQL无关。

    【讨论】:

    • 先生,那么它在 SQL Server 连接的情况下是如何工作的? stackoverflow.com/questions/13891115/…。或者这就是 jTDS 的工作原理?我问是因为我需要了解这些东西,因为我是 Java 世界的新人
    • 可能你在其他场景中设置了CLASSPATH环境变量?
    猜你喜欢
    • 1970-01-01
    • 2016-10-02
    • 2012-06-15
    • 1970-01-01
    • 2015-02-18
    • 2014-09-09
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多