“数据类型不一致: 应为 NUMBER, 但却获得 BINARY”解决方法

  昨天用JPA写报表的SQL,在执行的时候一直报 “数据类型不一致: 应为 NUMBER, 但却获得 BINARY” 的错误,一开始我还不知道Oracle的数据类型和Java对应类型有所不同,逐行检查我的SQL,查看是哪段类型出了问题。
  后面检查发现是下面这行语句出现了问题。

AND (ro.is_included_commission = ?35 OR ?35 IS NULL)

  查了数据表中的这个is_included_commission字段类型,就是NUMBER类型,于是换了Integer类型,但是依旧报 “数据类型不一致: 应为 NUMBER, 但却获得 BINARY” 的错误,然后还特地去网上搜索了Oracle数据库类型对应java类型。
引用地址:http://blog.csdn.net/perny/article/details/7971003

SQL数据类型JDBC类型代码标准的Java类型Oracle扩展的Java类型
CHARjava.sql.Types.CHARjava.lang.Stringoracle.sql.CHAR
VARCHAR2java.sql.Types.VARCHARjava.lang.Stringoracle.sql.CHAR
LONGjava.sql.Types.LONGVARCHARjava.lang.Stringoracle.sql.CHAR
NUMBERjava.sql.Types.NUMERICjava.math.BigDecimaloracle.sql.NUMBER
NUMBERjava.sql.Types.DECIMALjava.math.BigDecimaloracle.sql.NUMBER
NUMBERjava.sql.Types.BITbooleanoracle.sql.NUMBER
NUMBERjava.sql.Types.TINYINTbyteoracle.sql.NUMBER
NUMBERjava.sql.Types.SMALLINTshortoracle.sql.NUMBER
NUMBERjava.sql.Types.INTEGERintoracle.sql.NUMBER
NUMBERjava.sql.Types.BIGINTlongoracle.sql.NUMBER
NUMBERjava.sql.Types.REALfloatoracle.sql.NUMBER
NUMBERjava.sql.Types.FLOATdoubleoracle.sql.NUMBER
NUMBERjava.sql.Types.DOUBLEdoubleoracle.sql.NUMBER
RAWjava.sql.Types.BINARYbyte[]oracle.sql.RAW
RAWjava.sql.Types.VARBINARYbyte[]oracle.sql.RAW
LONGRAWjava.sql.Types.LONGVARBINARYbyte[]oracle.sql.RAW
DATEjava.sql.Types.DATEjava.sql.Dateoracle.sql.DATE
DATEjava.sql.Types.TIMEjava.sql.Timeoracle.sql.DATE
TIMESTAMPjava.sql.Types.TIMESTAMPjava.sql.Timestamporacle.sql.TIMESTAMP

  因为NUMBER类型由于字段长度对应的Java类型有所不同,于是我把BigDecimal、Boolean、Byte、Short都给试了一遍,但还是报那个错。后面我才意识到是因为我值传的是null,JPA中不能参null值给number类型。
  于是我采取了一个取巧的方法,如果是要传null值,就在dao层把参数赋为-1,然后修改SQL为如下语句。

AND (ro.is_included_commission = ?35 OR ?35 = '-1')
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值