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

使用Phoenix JDBC带参数LIKE查询遇TypeMismatchException错误求助

解决Phoenix LIKE参数查询的TypeMismatchException问题

我之前在使用Phoenix 4.10.0搭配HBase 1.2的时候,也碰到过完全一样的问题!当用JdbcTemplate做参数化LIKE查询时就会抛出TypeMismatchException: ERROR 203 (22005): Type mismatch. BOOLEAN for null,但直接把匹配内容写死在SQL里就一切正常。

问题原因

这个问题其实是Phoenix QueryServer客户端在参数绑定阶段的类型推断bug:当使用参数传递LIKE的匹配值时,客户端错误地将参数类型推断为BOOLEAN,而不是VARCHAR,和表中CUSTOMER_FULL_NAME的字符串类型不匹配,从而触发了类型错误。

解决方案

最简单的修复方式是显式指定参数的SQL类型,让JdbcTemplate明确知道这个参数是字符串类型,避免错误的类型推断。修改你的代码如下:

phoenixJdbcTemplate.queryForMap(
    "SELECT COUNT(*) AS totalRecord From DEV.CUSTOMER WHERE CUSTOMER_FULL_NAME LIKE ?",
    new Object[]{"%CUSTOMER"},
    new int[]{java.sql.Types.VARCHAR}
);

其他可选方案

如果你不想指定参数类型,也可以尝试在SQL中对参数做显式的类型转换,比如用CAST(? AS VARCHAR):

phoenixJdbcTemplate.queryForMap(
    "SELECT COUNT(*) AS totalRecord From DEV.CUSTOMER WHERE CUSTOMER_FULL_NAME LIKE CAST(? AS VARCHAR)",
    new Object[]{"%CUSTOMER"}
);

不过第一种显式指定参数类型的方法更直接,也更符合JDBC的最佳实践。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:24:26