当前位置: 首页 > 知识库问答 >
问题:

postgresql - Spring Boot + PostgreSQL 查询报错:Error attempting to get column 'xxx' from result set解决办法?

梁祯
2024-11-07

用springboot实现一个查询功能,在测试环境不报错,在生产环境会报错,但是再点击查询也能查出数据。
F12-网络-响应里报错:code:internal_server_error,message:Error attempting to get column 'xxx' from result set. Cause: java.sql.SQLException: Error。
生产环境日志里报错:uncategorized SQLException; SQL state [null]; error code [0]; Error; nested exception is java.sql.SQLException: Error
org.springframework.jdbc.UncategorizedSQLException: Error attempting to get column 'xxx' from result set. Cause: java.sql.SQLException: Error; at com.alibaba.druid.pool.DruidPooledResultSet.getBigDecimal(DruidPooledResultSet.java:480)

at org.postgresql.jdbc.PgResultSet.getBigDecimal(PgResultSet.java:438)
at org.postgresql.jdbc.PgResultSet.getBigDecimal(PgResultSet.java:434)
at org.postgresql.jdbc.PgResultSet.getBigDecimal(PgResultSet.java:2658)
at org.postgresql.jdbc.PgResultSet.getNumeric(PgResultSet.java:2683)
at org.postgresql.util.ByteConverter.numeric(ByteConverter.java:111)
at org.postgresql.util.ByteConverter.numeric(ByteConverter.java:157)

Caused by: java.lang.IllegalArgumentException: invalid length of bytes "numeric" value

这个字段在数据库里的数据类型是numeric,实体里是BigDecimal,精度没有限制,可以是空值,生产环境的最大值是1111111.111111。把生成环境的数据放在测试环境里测试,也不报错。生产环境里数据库版本:PostGreSQL 9.2.4(GaussDB 8.1.1 build 4394acf2) compiled at 2023-01-16 03:09:38 commit 2609 last mr 5121 release
测试环境的数据库版本:(openGauss 5.0.0 build a07d57c3) compiled at 2023-03-29 03:09:38 commit 0 last mr on x86_64-unknown-linux-gnu, compiled by g++ (GCC) 7.3.0, 64-bit,数据库驱动程序的版本是42.3.8。这个可能是什么原因导致的。

共有1个答案

沙柏
2024-11-07

数据库中的字段类型是 numeric,而实体类中使用的是 BigDecimal,那么问题可能出在数据的长度或精度上

有两种解决方案

1.检查数据库字段的精度和范围:

确保数据库中的 numeric 字段定义了足够的精度和范围。例如,numeric(10, 2) 表示最多10位数字,其中2位小数。如果你尝试存储或读取超出这个范围的值,就会引发错误。

2.调整实体类的映射:

确保实体类中的 BigDecimal 字段与数据库中的 numeric 字段精度匹配。如果需要,可以在实体类中使用注解来指定精度,例如:

@Column(precision = 10, scale = 2)
private BigDecimal yourField;
 类似资料:
  • 主要内容:SELECT 语句中的子查询使用,INSERT 语句中的子查询使用,UPDATE 语句中的子查询使用,DELETE 语句中的子查询使用子查询或称为内部查询、嵌套查询,指的是在 PostgreSQL 查询中的 WHERE 子句中嵌入查询语句。 一个 SELECT 语句的查询结果能够作为另一个语句的输入值。 子查询可以与 SELECT、INSERT、UPDATE 和 DELETE 语句一起使用,并可使用运算符如 =、<、>、>=、<=、IN、BETWEEN 等。 以下是子查询必须遵循的几个

  • 我对PostgreSQL JDBC有问题 我使用PostgreSQL-9和Glassfish,如果我用pgAdmin执行查询,我不会有任何错误,但在我的应用程序中,我有以下错误: Severe:org.postgresql.util.psqlexception:erreur:erreur de syntaxe sur our près de“d” 位置 ;:293 在org.postgresql.

  • 问题内容: 在PostgreSQL 9.3.4上,我有一个称为“ person”的JSON类型列,并且其中存储的数据为format 。我想检索索引为0的狗的品种。这是我运行的两个查询: 不起作用 作品 为什么必须进行类型转换?效率低下吗?我是在做错什么,还是对Postgres JSON支持有必要? 问题答案: 这是因为运算符将JSON数组元素获取为文本。您需要强制转换以将其结果转换回JSON。 您

  • 在PostgreSQL 9.3.4中,我有一个名为“person”的JSON类型列,其中存储的数据格式为

  • 问题内容: 可以说我有这样的第一张桌子 分支表 第二张桌子是这样的 余额表 我想查询余额表,其中每一行包含分支表的名称。例如分支表中的“ 123456ABC”,我想从余额表中获取“ ABC”行 我怎样才能做到这一点?到目前为止,我还没有尝试过这个查询 有什么建议吗? 问题答案: 你应该 转换 了的名称模式: 联接看起来更易读:

  • 问题内容: 我正在尝试通过将新记录更新或插入新的记录到 voice_user_table中 来更新数据库。该表定义如下: 这是我正在使用的查询。我实际上对所有值都使用了参数,但是出于测试目的,我将其替换为我确定应该可以使用的值。用户名 aaa@aaa.com 存在。 运行查询后,我得到的输出是: 尽管应该插入新值,但是因为该行在数据库上尚不存在。当我仅使用insert子句手动插入一行,然后执行上面

  • 我是新使用PostgreSQL的,我正在尝试从spring jdbc插入值。这是我的问题 我的代码如下 当我为上述方法执行测试用例时,我得到的错误如下: 组织。springframework。jdbc。BadSqlGrammarException:StatementCallback;错误的SQL语法[插入卖家(卖家ID、名字、姓氏、锡号、公司名称、公司标识、EPCH号、VAT号、CST号、佣金、状

  • 我正在数据库中运行以下查询: 它输出500行,其中只有一个结果列,运行大约需要1分钟43秒。输出以下计划: 逻辑是:对于每个选择的(在500个id的列表中)计算整数列,返回该金额与数字2147483647之间的较小值。结果必须包含500行,每个id对应一行,我们已经知道它们将与子查询中的至少一行匹配,因此不会生成空值。 索引仅是上的一个b树,属于整数类型。索引是主键上的b树,也是整数类型。表中的每