You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

IntelliJ中Tomcat连接PostgreSQL遇JDBC无合适驱动异常

PostgreSQL JDBC驱动在Tomcat中找不到的问题解决

已解决更新

已成功修复。通过Maven导入驱动并在创建Connection前添加Class.forName()解决了问题(尽管普遍认为该构造自Java 8起已过时,但显然仍有用处)。希望我的方案能帮到遇到类似问题的人。

问题描述

我正在学习使用PostgreSQL和Tomcat服务器。用MySQL时没遇到过这类问题,在Eclipse里把驱动加到服务器类路径后也一切正常。

现在运行最基础的数据库查询程序(从预存的图书列表查数据)时,出现以下错误:

java.sql.SQLException: No suitable driver found for jdbc:postgresql://localhost:5432/postgres
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:702)
    at java.sql/java.sql.DriverManager.getConnection(DriverManager.java:228)
    at com.ex.dynamicweb.DBHandler.getBooks(DBHandler.java:22)
    at com.ex.dynamicweb.HelloServlet.doGet(HelloServlet.java:23)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:564)
    at jakarta.servlet.http.HttpServlet.service(HttpServlet.java:658)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:205)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:51)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:174)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:149)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:167)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:90)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:482)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:115)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:93)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:673)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:74)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:340)
    at org.apache.coyote.http11.Http11Processor.service(Http11Processor.java:391)
    at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:63)
    at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:896)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1744)
    at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:52)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1191)
    at org.apache.tomcat.util.threads.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:659)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:834)

目前只有把JDBC驱动放到tomcat/lib文件夹才能解决,但有没有办法通过IDE自动添加?我试过修改部署配置、Artifacts(手动把lib文件夹加到解压后的war包的WEB-INF中)、通过库手动指定驱动路径、用Maven导入JDBC驱动并添加到Modules里,都没解决,有人遇到过类似情况吗?

环境版本

  • JDBC Driver: 42.6.0
  • PostgreSQL: 16
  • Java: 11
  • Tomcat: 10.1.16(8.5.96版本也有同样问题)
  • IntelliJ Ultimate 2023

相关代码

index.jsp

<%@ page contentType="text/html; charset=ISO-8859-1" pageEncoding="ISO-8859-1" %>
<!DOCTYPE html>
<html>
<head>
<title>Books</title>
</head>
<body>
<h1><%= "Hello World!" %>
</h1>
<br/>
<a href="hello-servlet">Hello Servlet</a>
</body>
</html>

HelloServlet.java

package com.ex.dynamicweb;

import java.io.*;

import jakarta.servlet.http.*;
import jakarta.servlet.annotation.*;

@WebServlet(name = "helloServlet", value = "/hello-servlet")
public class HelloServlet extends HttpServlet {
    private String message;

    public void init() {
        message = "Hello World!";
    }

    public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException {
        response.setContentType("text/html");

        // Hello
        PrintWriter out = response.getWriter();
        out.println("<html><body>");
        out.println("<h1>" + message + "</h1>");
        for (String book : DBHandler.getBooks()) {
            out.print(book + "</br>");
        }
        out.println("</body></html>");
    }

    public void destroy() {
    }
}

DBHandler.java

package com.ex.dynamicweb;

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

import java.util.ArrayList;
import java.util.List;

public class DBHandler {

    private static final String SELECT_ALL_FROM_LIBRARY = "SELECT * FROM library.books";

    public static List<String> getBooks() {
        List<String> result = new ArrayList<String>();
        String url = "jdbc:postgresql://localhost:5432/postgres";
        String user = "postgres";
        String password = "1234";

        try (Connection connection = DriverManager.getConnection(url,
                user, password)) {
            System.out.println("Java JDBC PostgreSQL Example");

            System.out.println("Connected to PostgreSQL database!");
            Statement statement = connection.createStatement();
            ResultSet resultSet = statement.executeQuery(SELECT_ALL_FROM_LIBRARY);
            while (resultSet.next()) {
                result.add(resultSet.getString("NAME") + "- id: " + resultSet.getString("ID"));
            }
        } catch (SQLException e) {
            System.out.println("Connection failure.");
            e.printStackTrace();
        }

        return result;
    }
}

相关配置说明

  • Artifacts:已手动将lib文件夹添加到解压后的war包WEB-INF目录
  • Libraries:项目中已添加PostgreSQL JDBC驱动
  • Modules:驱动已关联到项目模块

内容的提问来源于stack exchange,提问作者Ice K

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 00:27:14