在IDEA中已经配置postgis数据库驱动并且能在Java类中连接数据库,但在servlet中无法连接数据库且导致Tomcat自动断开连接的解决方案

最近在IDEA中用JDBC连接PostgreSQL数据库时遇到了这样一个奇怪的事情:

PostgreSQL JDBC Driver官网下载好JDBC驱动之后,在IDEA的Project Structure的Modules中已经添加好jar包的依赖,并且在普通的Java类(自己封装的数据库工具类)中能够成功的连接上数据库,也能从里面读取数据。

但是,正当咱连接上数据库而高兴的时候,悲剧悄然来临。如果在servlet中调用自己编写数据库工具类进行数据库连接,就会出现如下图所示的错误,然后自动断开与tomcat服务器的连接。
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Vmw0M50l-1590675637804)(D:\WebGIS实习资料文件\blog截图\QQ图片20200528215826.png)]
这是什么原因呢,调试之后,咱发现就是在跳转到数据库工具类中进行postgis数据库连接时出错,而出错时会提示java.lang.ClassNotFoundException: org.postgresql.Driver

在这里插入图片描述

这就相当明显了,就是web应用没有找到我们的JDBC Driver。我们的servlet只会加载到web项目的目录(webapp或WebRoot目录)里面的jar包。这比较让人疑惑,但事实就是这样,我们添加的jar包没有被web应用加载到。

那如何解决呢?只需要在自己web项目根目录(webapp或者WebRoot等)下的WEB-INF目录中添加lib文件夹,将其添加到依赖。然后吧需要的数据库驱动jar包放到该目录下即可。

在这里插入图片描述

我在的另一篇博客中也提到过,/WEB-INF/lib/ 这个目录一般放置仅在这个web应用中用到的jar文件,例如数据库驱动jar文件(我们链接postgis数据库时就用到)。

这样,我们在servlet中就能够连接数据库,愉快地读取数据了。

首先,需要引入PostgreSQL JDBC驱动PostGIS JDBC驱动。可以通过Maven或手动下载安装。 接下来,需要编写Java代码来连接PostGIS数据库和读取空间信息。以下是一个示例代码: ```java import java.sql.Connection; import java.sql.DriverManager; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import org.postgis.Geometry; import org.postgis.PGgeometry; import org.postgis.Point; public class PostGisApp { public static void main(String[] args) throws SQLException { String url = "jdbc:postgresql://localhost:5432/postgisdb"; String user = "postgres"; String password = "password"; Connection conn = DriverManager.getConnection(url, user, password); Statement stmt = conn.createStatement(); String query = "SELECT id, name, ST_AsText(geom) FROM spatial_table"; ResultSet rs = stmt.executeQuery(query); while (rs.next()) { int id = rs.getInt("id"); String name = rs.getString("name"); PGgeometry geom = (PGgeometry) rs.getObject("geom"); Geometry geometry = geom.getGeometry(); if (geometry instanceof Point) { Point point = (Point) geometry; System.out.println("ID: " + id + ", Name: " + name + ", Point: " + point.getX() + "," + point.getY()); } else { System.out.println("ID: " + id + ", Name: " + name + ", Geometry: " + geometry.toString()); } } rs.close(); stmt.close(); conn.close(); } } ``` 以上代码连接到名为“postgisdb”的PostGIS数据库,并从名为“spatial_table”的表检索空间信息。使用ST_AsText函数将几何对象转换为文本表示形式。可以根据具体情况更改查询和输出格式。 确保在类路径包括PostgreSQL JDBC驱动PostGIS JDBC驱动,然后运行Java应用程序。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值