You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

升级Ignite至2.11.1后查询数据库报十六进制字符串异常求助

Ignite 2.7.6升级至2.11.1后SQL查询异常问题

我们将Ignite服务器从2.7.6版本升级至2.11.1版本后,执行SELECT * FROM EMPLOYEE WHERE EMPLOYEE_ID IN (?)查询时出现如下异常:

[2023-01-18T04:56:14,637][ERROR][client-connector-#143][JdbcRequestHandler] Failed to execute SQL query [reqId=29, req=JdbcQueryExecuteRequest [schemaName=PUBLIC, pageSize=1024, maxRows=0, sqlQry=SELECT * FROM EMPLOYEE WHERE EMPLOYEE_ID IN (?), args=Object[] [1], stmtType=SELECT_STATEMENT_TYPE, autoCommit=true, partResReq=false, explicitTimeout=false, super=JdbcRequest [type=2, reqId=29]]]
javax.cache.CacheException: class org.apache.ignite.internal.processors.query.IgniteSQLException: General error: "class org.apache.ignite.IgniteCheckedException: Runtime failure on lookup row: IndexSearchRowImpl [rowHnd=org.apache.ignite.internal.processors.query.h2.index.QueryIndexRowHandler@5b289c8e]"; SQL statement:
SELECT * FROM EMPLOYEE WHERE EMPLOYEE_ID IN (?) [50000-197]
.
.
.
Caused by: org.apache.ignite.IgniteCheckedException: Rows cannot be compared
.
.
.
Caused by: org.h2.message.DbException: Hexadecimal string with odd number of characters: "1" [90003-197]

可能的原因及解决建议

  • 数据类型不匹配
    异常信息Hexadecimal string with odd number of characters: "1"指向核心问题:EMPLOYEE_ID字段的数据格式与查询参数不兼容。Ignite 2.11.1内置的H2引擎对数据类型校验更严格,若原2.7.6版本中该字段存储为十六进制字符串,升级后传入数值类型参数(如1)会触发转换错误。

  • 检查表结构与数据
    确认EMPLOYEE表的EMPLOYEE_ID字段定义:

    • 若字段应为数值类型(如INT),排查现有数据中是否存在十六进制格式的无效值,清理或修正这类数据;
    • 若字段为字符串类型,确保查询参数传入偶数长度的十六进制格式字符串(如"01"而非"1")。
  • 调整参数绑定逻辑
    检查JDBC客户端的参数绑定代码,确保传入IN (?)的参数类型与表字段类型完全匹配:

    • 字段为数值类型时,以数值类型绑定参数,避免转为字符串;
    • 字段为字符串类型时,将数值参数转换为符合要求的十六进制格式字符串后再传入。
  • 重建索引与数据兼容处理
    Ignite 2.7到2.11版本间SQL引擎有较大更新,可尝试重建EMPLOYEE_ID相关索引,执行REBUILD INDEX语句;或导出全量数据后重新导入,确保数据格式适配新版本的校验规则。

内容的提问来源于stack exchange,提问作者sushil

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.03 20:46:01