jdbc异常

5ktev3wc  于 2021-09-30  发布在  Java
关注(0)|答案(1)|浏览(389)

我有一个我曾经使用过的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)

有人能帮我解决这个问题吗?谢谢

14ifxucb

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 ),也可能是一个有更多信息的原因。
如果这就是你所拥有的一切,那么你可能正在从事这种非常糟糕的实践,这在新手中很常见,很遗憾,因此答案和教程:

try {
   stuff();
} catch (SomeException e) {
   log(e.getMessage());
}

在代码库中搜索此反模式并将其全部删除。这不好。处理无法处理的异常的正确方法是向前抛出它(在90%+中,大多数异常都无法处理)。如果由于api限制而无法完成,请将其 Package 。更新ide模板等,因为fire and forget我不想考虑的解决方案是:

try {
    stuff();
} catch (SomeException e) {
    throw new RuntimeException("Uncaught", e);
}

这将确保代码停止运行(这很好-根据定义,您不完全了解导致此异常发生的外来条件,因此根据定义,您不知道从现在开始您在做什么)。因此,继续执行就是运行不是根据当前情况编写的代码(显然是一个愚蠢的计划),并确保保留所有相关信息,并最终将其保存在日志中。
或者,找到发生这种情况的地方并记录 e.getSQLState() (如果你按照我上面的建议去做的话,这应该会被记录下来)。您可以搜索代码+‘psqljdbc’,并获得一个更详细的页面,确切地了解正在发生的事情。
--编辑--
psql错误状态在本psql文档页面中进行了描述。
状态0a表示“不支持功能”。
显然,hibernate正在尝试发送一些psql可以识别但不支持的sql。您可以配置hibernate来打印查询,sqlexception也可能包含该信息。

相关问题