PostgreSQL JDBC驱动找不到问题求助:程序或未定位到驱动位置
你的诊断完全准确——这个错误的根源就是Java运行时的类路径里没有包含PostgreSQL的JDBC驱动Jar包。IntelliJ和Datagrip能正常连接是因为它们自身维护了独立的驱动管理机制,但你的项目在编译运行时并没有把驱动包纳入依赖范围。下面是针对不同项目场景的具体解决步骤:
1. 如果你用Maven管理项目
直接在pom.xml的dependencies块中添加PostgreSQL驱动依赖,Maven会自动下载并管理这个包:
<dependency> <groupId>org.postgresql</groupId> <artifactId>postgresql</artifactId> <version>42.6.0</version> <!-- 建议使用最新稳定版,可根据你的PostgreSQL版本调整 --> </dependency>
添加完成后,点击IntelliJ右侧Maven面板的「Reload All Maven Projects」按钮,等待依赖下载完成即可。
2. 如果你用Gradle管理项目
在build.gradle的dependencies中添加驱动依赖:
dependencies { implementation 'org.postgresql:postgresql:42.6.0' }
然后点击IntelliJ顶部的「Sync Project with Gradle Files」按钮,同步依赖。
3. 如果你是手动管理项目(无构建工具)
步骤1:下载驱动Jar包
下载对应版本的PostgreSQL JDBC驱动包(注意驱动版本要和你的PostgreSQL服务器版本兼容,比如PostgreSQL 12+推荐使用42.2+版本的驱动)。
步骤2:将驱动添加到项目类路径
在IntelliJ中操作:
- 右键你的项目 → 选择「Open Module Settings」(或按
F4) - 切换到「Libraries」标签页 → 点击左上角的
+号 → 选择「Java」 - 找到你下载的PostgreSQL驱动Jar包,选中后点击「OK」
- 在弹出的窗口中勾选你的项目模块,点击「OK」完成导入
步骤3:运行时指定类路径(命令行运行时需要)
如果用命令行编译运行,需要手动指定驱动包的路径:
# 编译代码 javac Connect.java # 运行,Windows系统把冒号换成分号 java -cp .:/path/to/your/postgresql-42.6.0.jar Connect
额外提示
从JDBC 4.0(对应Java 6+)开始,驱动会自动通过META-INF/services/java.sql.Driver文件注册,所以你代码里的Class.forName("org.postgresql.Driver")其实可以省略,但保留也不会有问题——核心还是要确保驱动在类路径中。
最后可以检查IntelliJ的Run Configuration:打开「Run」→「Edit Configurations」,选中你的运行配置,切换到「Classpath」标签,确认PostgreSQL的驱动Jar包已经被包含在列表中。
内容的提问来源于stack exchange,提问作者Charles Julien




