当前位置: 首页 > 面试题库 >

未找到加载JDBC org.postgresql.Driver的类

糜鸿风
2023-03-14
问题内容

我正在开发一个Web项目,最近安装了Postgres 9.1.1。

PostgreSQL服务器已启动并正在运行。我可以像往常一样通过psql连接,并且从我从8.5创建的数据库转储中加载并正确保存了所有内容。

因此,我还在这里下载了9.1
postgres版本的JDBC4驱动程序:http ://jdbc.postgresql.org/download/postgresql-
jdbc-9.1-901.src.tar.gz

我通过eclipse使用项目属性将其添加到Java构建路径中。

这是我用来提供与其他类的数据库连接的代码(即,是单例,仅当现有对象是关闭的或为null时,才一次从一个对象获得新的连接)

public abstract class DBConnection {
private static Connection connection = null;

public static void connect() {
    try {
        if (connection == null) {
            String host = "127.0.0.1";
            String database = "xxxxx";
            String username = "xxxxx";
            String password = "xxxxx";
            String url = "jdbc:postgresql://" + host + "/" + database;
            String driverJDBC = "org.postgresql.Driver";
            Class.forName(driverJDBC);
            connection = DriverManager.getConnection(url, username,
                    password); //line firing the class not found exception

        } else if (connection.isClosed()) {
            connection = null;
            connect();
        }
    } catch (SQLException e) {
        e.printStackTrace(System.err);
    } catch (Exception e) {
        e.printStackTrace(System.err);
    }
}

public static void disconnect() {
    if (connection != null) {
        try {
            connection.close();
        } catch (SQLException e) {
            Logger.getLogger(DBConnection.class.getName()).log(
                    Level.SEVERE, null, e);
        }
        }
    }

    public static Connection getConnection() {

        try {
            if (connection != null && !connection.isClosed()) {
                return connection;
            } else {
                connect();
                return connection;
            }
        } catch (SQLException e) {
            Logger.getLogger(DBConnection.class.getName()).log(Level.SEVERE,
                    null, e);
            return null;
        }
    }

    @Override
    public void finalize() {
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {
                Logger.getLogger(DBConnection.class.getName()).log(
                        Level.SEVERE, null, e);
            }
        }
    }

}

正如我在运行项目时在标题中所写的,并且一个类要求与该类的连接时,我总是会收到“未找到类”异常,因为它显然无法加载org.postgresql.Driver.class该驱动程序位于项目〜/
lib / org.postgresql-9.1-901.jdbc4.jar的子文件夹,并且正如我所说的那样,通过eclipse项目属性添加到了构建路径。

我还提供了一个示例查询,以查看类访问DBConnection的通常行为:

public static final User validateUserCredentials(String id, String pswd) {
    Connection connection = DBConnection.getConnection();
    Logger.getLogger(Credentials.class.getName()).log(Level.SEVERE, (connection!=null)?"connection not null":"connection null");
    Statement stmt = null;
    Logger.getLogger(Home.class.getName()).log(Level.SEVERE, "validating credentials for user: username : " + id + " password : " + pswd);
    String sql = "Select * from fuser where id = '" + id + "'";
    ResultSet resultset = null;
    try {
        stmt = connection.createStatement();
        resultset = stmt.executeQuery(sql);
        Logger.getLogger(Credentials.class.getName())
                .log(Level.SEVERE, sql);
        resultset.next();
        String password = resultset.getString("pswd");
        if (pswd.equals(password))
            return new User(id, pswd);
    } catch (SQLException ex) {

        Logger.getLogger(Credentials.class.getName()).log(Level.SEVERE,
                null, ex);
    } finally {
        if (stmt != null)
            stmt = null;

        if (resultset != null)
            resultset = null;
        if (connection != null) {
            try {
                connection.close();
            } catch (SQLException e) {

            }
            connection = null;
        }
    }
    return null;
}

问题答案:

我正在开发一个 Web项目 ,最近安装了Postgres 9.1.1。

我 通过eclipse 使用项目属性 将其添加到Java构建路径中。

那是错误的方式。必须/WEB-INF/lib将该JAR直接拖放到该Web项目的文件夹中,而不必摆弄项目属性中的“ 构建路径
”。该文件夹是webapp运行时类路径的标准部分。

具体问题 无关
:您的DBConnection班级存在重大设计缺陷。您已声明Connectionstatic,这实际上使您的连接 不是线程安全的
。使用连接池,切勿将Connection(nor StatementResultSet)分配为类/实例变量。它们应该在与try- finally执行查询相同的块中创建和关闭。此外,您还有一个SQL注入孔。使用PreparedStatement而不是连接SQL字符串中的用户控制变量。



 类似资料:
  • 我已经通过Git导入了一个JavaProject。在下一步中,我想测试一个简单的Hello-World-Program。 如果我在Package-Explorer中右键单击Test.java并执行“运行Java应用程序”,它说: Fehler:Hauptklasse测试konnte nicht gefunden Order geladen werden[错误:找不到或加载主类测试。 有没有像Ant

  • 我得到下面的错误。我最近将更新为其最新版本,之后出现此错误。我不确定到底出了什么问题,我在谷歌上非常努力地寻找答案,因为我是一个新的角度类型的编程。 我尝试了以下步骤: 已尝试弃用返回,但运气不佳 尝试导入软件包,仍然没有成功 已尝试启动rc1,但运气不佳 你能告诉我实际的问题是什么,我应该如何解决这个问题? localhost/: 38错误:(SystemJS)XHR错误(404未找到)加载ht

  • 我正在运行我的应用程序从xcode到我的iOS设备,我得到这个和黑屏在iOS设备。 控制台文本:

  • 好的——问题似乎已经解决——请参阅下面的工作解决方案。 问题= 我查询的元素是谷歌广告部门,我想确保我们在所有平台上都提供广告。加载是异步的,所以我要确保等待页面加载。 当我从ruby shell(irb)手动驱动selenium时,我总是能够在IE版本9、10、11中找到元素。当我手动导航到浏览器堆栈的“Live”浏览器内IE仿真中的站点时也是如此。 但是——当我通过RSpec以编程方式运行与s

  • 错误是: 项目结构: crearcompetition。php(位于public/)如下所示: 竞争。php(位于src/Championsweb/Model/VO中)如下所示: Composer.json看起来像这样: 指数php具有自动加载要求: 自动加载类图。php具有CompetitionVO类: 基本上是竞争。看法php有一个表单,通过POST传递给CREARCOM竞。php。然后是竞争

  • 问题如下。我正在为一个名为“myprogramminglab”的在线编程网站做作业。它要求我做以下练习: 设计一个名为 Person 的类,其中包含用于保存人员姓名、地址和电话号码的字段(全部为字符串)。编写初始化所有这些值的构造函数,以及每个字段的赋值函数和访问器方法。 接下来,设计一个名为Customer的类,它继承自Person类。Customer类应该有一个用于客户编号的字符串字段和一个指