0

我在连接 Java 和 PostgreSQL 数据库时遇到了一些困难。我已经下载了JDBC4 Postgresql 驱动程序,版本 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");

如果是这样,那么驱动程序名称是什么?但是,出于学习目的,我遵循了这一点。

但是,如果我这样做

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

connected

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

提前致谢

4

1 回答 1

2

驱动程序名称是可以的。和驱动官方文档中提到的一样。因此,驱动程序只是不在类路径中。

你说:

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

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

java JavaPostGreSQLConnectivity

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

java -cp postgresql-jdbc4.jar JavaPostGreSQLConnectivity

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

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

您的选择是:

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

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

于 2012-12-15T10:54:55.453 回答