【问题标题】:Loading the postgreSQL JDBC driver加载 postgreSQL JDBC 驱动程序
【发布时间】:2013-10-07 02:00:30
【问题描述】:

我正在尝试为 Java 程序加载 JDBC postgreSQL 驱动程序。我知道这在互联网上到处都是。我尝试了很多解决方案,但没有一个对我有用。

问题是我得到了这个错误:

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 Mountain Lion。

我们将不胜感激。

【问题讨论】:

  • 编译运行程序时需要确保postgresql-9.2-1003.jdbc3.jar在类路径内

标签: java postgresql jdbc


【解决方案1】:

首先你需要在运行java程序时使用.而不是/来提及包名:

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

java com.freire.test.JDBCExample

但是现在它会为找不到 postgres 驱动程序类而哭泣,因为类路径中缺少 postgres jar。所以你需要在运行程序时使用类路径选项并将你的 postgres jar 添加到类路径中:

对于窗户:

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

【讨论】:

  • 我一直在尝试这样做,但到目前为止没有成功。我该怎么做?
  • @ivantxo 我在回答中提到了所有内容。只需使用我回答中提到的最后一个选项,您应该会很好。
  • 谢谢,但这给了我一个 java 命令用法的选项列表。然后是几行 postgres-9.2.jdbc3.jar 错误,像这样:../lib/postgresql-9.2-1003.jdbc3.jar: line 1: PK: command not found or ../lib/postgresql-9.2- 1003.jdbc3.jar:命令替换:第 9 行:语法错误:文件意外结束
  • @ivantxo 你用的是什么操作系统?
  • OS X 山狮。我想你已经编辑了你的答案。现在会试试。谢谢
【解决方案2】:

在 Linux 上执行以下操作:

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

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

它将为您提供 jdbc 驱动程序。确保 jar 文件位于同一位置

【讨论】:

    【解决方案3】:

    编译运行程序时需要确保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 引用,但可以将其视为如何在复杂过程中包含编译时依赖项的演示;)

    【讨论】:

    • 编译期间classapth中不需要jar,因为驱动程序类仅在运行时加载。
    • @JunedAhsan 它会如何伤害? (是的,你是对的......将其视为编译中的扩展练习;))
    • 这不会伤害你,这就是为什么我没有投反对票伤害你 ;-)
    • @JunedAhsan 试试这个给了我:-bash: ./classes: 是一个目录,不做任何事情。摆脱 ./classes 又给了我:ClassNotFoundException。
    • 抱歉,Windows :P,尝试使用-cp lib/postgresql-9.2-1003.jdbc3.jar:./classes
    猜你喜欢
    • 2014-06-26
    • 2018-08-05
    • 2011-08-24
    • 2013-10-25
    • 2012-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多