Java App不会从PostgreSQL

时间:2015-05-15 03:52:18

标签: java postgresql jdbc

我的Java应用程序在本地工作正常,但现在当我在EC2实例(Ubuntu 14,Tomcat 8,PostgreSQL 9.3)上部署它时,我收到以下错误(见下文)。后端是由另一位不再属于团队成员的开发人员编写的。基本上,一旦从下拉菜单中选择了值,就需要显示一些数据。

我一直在谷歌这个问题疯狂,但没有找到解决方案。我以为它可能与jdbc:postgresql://localhost:5432/dbName有关。我甚至尝试插入实际的IP而不是localhost,但仍然没有运气。对我来说,连接数据库而不是代码似乎是一个问题。正如我所提到的,它在我的计算机上运行正常。

任何指导都将非常感谢,因为我不是Java专家。谢谢你的帮助。

完整的错误日志如下:

java.lang.NullPointerException
com.app.data.ConnectionPool.freeConnection(ConnectionPool.java:52)
com.app.data.appDB.getData(appDB.java:155)
com.app.servlets.GetAppServlet.processRequest(GetAppServlet.java:42)
com.app.servlets.GetAppServlet.doGet(GetAppServlet.java:67)
javax.servlet.http.HttpServlet.service(HttpServlet.java:622)
javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
        at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
        at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:315)
        at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
        at java.lang.Thread.run(Thread.java:745)

1 个答案:

答案 0 :(得分:0)

根据您提供的内容很少,我最好的猜测是,您提到的connection.close()方法是在finally块中调用的,其中没有检查是否{{1}是connection

我想你的代码如下所示:

null

如果Connection connection = null; try { connection = getDatabaseConnectionSomehow(...); // do stuff with database } finally { connectionPool.freeConnection(connection); } 的跟注产生异常,则在输入getDatabaseConnectionSomehow(...)数据块时,connection将为null。我上面提到的代码不会检查finally是否connection,如果您的null方法在关闭之前也无法检查连接是否为freeConnection,你会得到一个NullPointerException。

null块中抛出的异常将替换在相应的finally块中抛出的任何异常。所以在你的情况下,你没有看到获得数据库连接的真正异常,因为NullPointerException阻碍了它。

希望添加合适的空值检查可以帮助您找出真正的问题所在。