现象
相信当你看到本文时已经看过了无数次PostgreSQL抛错“不良的类型值: long”之解决或MySql迁移到PG后出现“postgresql.util.PSQLException: 不良的类型值”。你可能用到了org.apache.ibatis.type.BlobTypeHandler,甚至是自定义了BlobTypeHandler。解决问题的方法远比想象中简单。
参考文献
How to Select a BLOB column from database using iBatis
解决思路要点
1.使用 构造一个实体类,byte[]
接收blob
类型的数据;
import lombok.Data;
@Data
public class Img {
private byte[] stAsTiff;
}
2.使用resultMap
接收查询结果
<resultMap id="ImgRes" type="com.example.demo.base.Img">
<result column="st_astiff" property="stAsTiff" javaType="_byte[]" jdbcType="BINARY"/>
</resultMap>
<select id="getTiffBlob" resultMap="ImgRes">
WITH
point as (select 'SRID=4326;Point(118.74 31.94)'::geometry geom)
SELECT
st_astiff(rast)
FROM
asterGDEM,point
WHERE
st_intersects(rast, point.geom);
</select>
- 重点1:javaType中应填
_byte[]
,原因不再叙述 - 重点2:jdbcType应指定为
BINARY
效果
经过上述步骤后,最终得到了理想的数据。
本案例中需要将查询结果转化为tif
文件,最终实现的效果如图所示。