我有一个我曾经使用过的web应用程序
org.springframework-version: 4.1.4.RELEASE
spring.security.version: 3.2.5.RELEASE
org.hibernate-version: 3.5.1-Final.
java version 1.6
org.postgresql: 7.4.1-jdbc3
我正在尝试升级spring和hibernate版本,我在pom文件中成功地更新了以下内容
org.springframework-version: 5.3.6
spring.security.version: 5.4.6
org.hibernate-version: 5.4.31.Final
java version 11.0.2
org.postgresql: 42.0.0
我还更新了我提到的spring安全bean的相关xml文件。我用的是postgres数据库。此外,在我的系统中,一切都正常工作,当我将这些更改提交到qa环境时,登录不起作用。我在登录应用程序时检查了日志,它显示了一些错误。这是日志
[http-nio-8080-exec-7] WARN org.hibernate.engine.jdbc.spi.SqlExceptionHelper - SQL Error: 0, SQLState: 0A000
[http-nio-8080-exec-7] ERROR org.hibernate.engine.jdbc.spi.SqlExceptionHelper - This method is not yet implemented.
20210616-02:51:01.539 sitepm-service [http-nio-8080-exec-9] ERROR o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions - This method is not yet implemented.
20210616-02:51:01.539 sitepm-admin [http-nio-8080-exec-9] ERROR o.h.e.jdbc.spi.SqlExceptionHelper.logExceptions - This method is not yet implemented.
20210616-02:51:01.542 sitepm-service [http-nio-8080-exec-9] ERROR c.s.a.u.controller.LoginController.setExceptionPage - org.hibernate.exception.GenericJDBCException: could not prepare statement
20210616-02:51:01.542 sitepm-admin [http-nio-8080-exec-9] ERROR c.s.a.u.controller.LoginController.setExceptionPage - org.hibernate.exception.GenericJDBCException: could not prepare statement
检查了ubuntu服务器上的postgres版本
ubuntu@ip-10-0-0-14:~$ psql --version
psql (PostgreSQL) 12.2 (Ubuntu 12.2-2.pgdg18.04+1)
有人能帮我解决这个问题吗?谢谢
1条答案
按热度按时间14ifxucb1#
另外,如何在ubuntu服务器中检查postgresql jdbc驱动程序版本
那个
org.postgresql
您升级到42.0.0的依赖项?这就是postgres jdbc驱动程序。它直接与运行在JDBCURL连接字符串中的任何ip上的postgres服务器通信。您可以使用以下命令在ubuntu上检查postgres版本(因此不是jdbc驱动程序,postgres-实际的数据库引擎)
pg_lsclusters
-你可能不得不sudo
或者以用户身份运行它postgresql
. 第一列(带标题)Ver
)正在列出与postgres的主要版本匹配的db存储版本。你也可以跑步
psql --version
.20210616-02:51:01.542 sitepm服务[http-nio-8080-exec-9]错误c.s.a.u.controller.logincontroller.setexceptionpage-org.hibernate.exception.genericjdbcexception:无法准备语句
丢失了大量信息。应该有一个堆栈跟踪,应该有一个sqlstate值(与调用时得到的值相同)
.getSQLState()
在SQLException
),也可能是一个有更多信息的原因。如果这就是你所拥有的一切,那么你可能正在从事这种非常糟糕的实践,这在新手中很常见,很遗憾,因此答案和教程:
在代码库中搜索此反模式并将其全部删除。这不好。处理无法处理的异常的正确方法是向前抛出它(在90%+中,大多数异常都无法处理)。如果由于api限制而无法完成,请将其 Package 。更新ide模板等,因为fire and forget我不想考虑的解决方案是:
这将确保代码停止运行(这很好-根据定义,您不完全了解导致此异常发生的外来条件,因此根据定义,您不知道从现在开始您在做什么)。因此,继续执行就是运行不是根据当前情况编写的代码(显然是一个愚蠢的计划),并确保保留所有相关信息,并最终将其保存在日志中。
或者,找到发生这种情况的地方并记录
e.getSQLState()
(如果你按照我上面的建议去做的话,这应该会被记录下来)。您可以搜索代码+‘psqljdbc’,并获得一个更详细的页面,确切地了解正在发生的事情。--编辑--
psql错误状态在本psql文档页面中进行了描述。
状态0a表示“不支持功能”。
显然,hibernate正在尝试发送一些psql可以识别但不支持的sql。您可以配置hibernate来打印查询,sqlexception也可能包含该信息。