【问题标题】:How to resolve 'No suitable driver found' error如何解决“找不到合适的驱动程序”错误
【发布时间】:2015-06-21 11:29:23
【问题描述】:

我正在运行 Netbeans 8.0.2。我正在学习 JDBC,并希望将其连接到 PostgreSQL 数据库。我查找了所有可能的答案,但没有答案使它起作用。

我还在左侧菜单中选择了库为PostgreSQL JDBC Driver -postgresql-9.2-1002.jdbc4.jar

显示的错误是:

发生 SQL 异常java.sql.SQLException: 找不到合适的驱动程序 对于 Jdbc:postgresql://localhost:5432/postgres

代码如下:

try   { 

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

  }
  catch(ClassNotFoundException e) {
     System.out.println("Class not found "+ e);
  }
     try {

     Connection con = DriverManager.getConnection
     ("Jdbc:postgresql://localhost:5432/postgres","postgres",
     "gautam");

     Statement stmt = con.createStatement();
     ResultSet rs = stmt.executeQuery
     ("SELECT * FROM role");
     System.out.println("id  name");

     while (rs.next()) {
        int id = rs.getInt("id");
        String name = rs.getString("name");
        System.out.println(id+"   "+name);

     }
  }
  catch(SQLException e){
     System.out.println("SQL exception occured" + e);
  }

【问题讨论】:

  • 我想知道jdbc: 是否区分大小写。 (我猜这不是问题,但试试吧……)

标签: java postgresql netbeans jdbc


【解决方案1】:

我很快尝试了你的代码,第一次遇到了同样的错误:

更正为:DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres","gautam"); 成功了。

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;

public class NewClass {

    public void initialize() {
        try {
            Class.forName("org.postgresql.Driver");
        } catch (ClassNotFoundException e) {
            System.out.println("Class not found " + e);
        }
        try {
            Connection con = DriverManager.getConnection("jdbc:postgresql://localhost:5432/postgres", "postgres","gautam");
            Statement stmt = con.createStatement();
            ResultSet rs = stmt.executeQuery("SELECT * FROM role");
            System.out.println("id  name");

            while (rs.next()) {
                int id = rs.getInt("id");
                String name = rs.getString("name");
                System.out.println(id + "   " + name);

            }
        } catch (SQLException e) {
            System.out.println("SQL exception occured" + e);
        }
    }

    public static void main(String[] args) {
        new NewClass().initialize();
    }

}

DriverManager 询问注册到它的每个驱动程序是否可以读取 url:“jdbc:postgresql://localhost:5432/postgres”。
使用返回 true 的第一个驱动程序。
在您的情况下,没有驱动程序返回 true。
返回 true 或 false 的驱动程序的方法是 acceptsURL("jdbc:postgresql://localhost:5432/postgres")

您可以使用以下方法对其进行测试:

    try {
        Enumeration<Driver> drivers = DriverManager.getDrivers();
        while (drivers.hasMoreElements()) {
            Driver nextElement = drivers.nextElement();
            JOptionPane.showMessageDialog(null, nextElement.acceptsURL("jdbc:postgresql://localhost:5432/postgres"));
            JOptionPane.showMessageDialog(null, nextElement.acceptsURL("Jdbc:postgresql://localhost:5432/postgres"));
        }
    } catch (SQLException e) {
        e.printStackTrace();
    }

【讨论】:

  • 谢谢。我刚刚将 Jdbc 转换为小案例,它工作了!
【解决方案2】:

我使用的是 NetBeans 11.1 我收到了与此线程标题相同的错误消息。 我能够在 Linux 命令行上编译和运行我的 Java 代码。

两天以来我一直忽略的是 NetBeans 中的以下错误消息,分别是。我没有将此错误消息与我的问题联系起来:

跳过不存在的资源目录 /home/thatsme/NetBeansProjects/myproject/src/main/resources

  1. 我在命令行手动创建了这个目录
  2. 我将带有 postgresql 驱动程序“postgres-42.2.8.jar”的文件复制到此目录中

从那时起,我的代码在 NetBeans 中也能正常运行。我知道,这是一个非常特殊的错误,但也许它也会帮助另一个错误。只是想在这里回馈一些东西。

编辑: 我对 ORACLE 文件 ojdbc8.jar 有同样的问题,我上面提到的解决方案没有帮助。但是在我解压 ojdbc8.jar 之后它工作正常。

$ jar xf ojdbc8.jar

如果我在 Netbeans/Maven 之外运行我的应用程序,那么它也适用于 CLASSPATH 中的打包版本。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-01-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-22
    • 2018-08-27
    • 2012-07-07
    • 2012-12-09
    相关资源
    最近更新 更多