同样的sql语句,在sql developer中可以查到数据,在java程序中得不到数据。

问题:下面的sql写在javaDomainimpl中,第二段sql是带有具体数据的sql文,第二段在sql developer中可以执行,并且有结果。

但是同样的sql 文在java程序中执行,在控制台的执行效果如图三,但是取得不到结果。也没有报错。虽然在控制台输出语句执行的过程,但却没有结果。经过排除,问题出在SQL上。通过查找K_MST_TRADE_INDUSTRY_TYPE表结构,发下该表字段INDUSTRY_TYPE_KBN的结构如下:发现该字段是CHAR(4BYTE).如果这时该字段取值为图二‘001’时,在sql developer中会自动 将INDUSTRY_TYPE_KBN  ='001'匹配为INDUSTRY_TYPE_KBN  ='001 '补为4字节,然后去查找。所以在sql developer中可以查到数据。

但是在java中,执行该sql时,不会自动转换会按照‘001’去查找匹配的数据,但是数据库中存储的是‘001 ’4字节,所以查不到数据。

 

SELECT DISTINCT 
       t.TRADE_CODE TRADE_CODE ,
       main.TRADE_NAME TRADE_NAME ,
       main.trade_name_kana trade_name_kana,
       main.area_kbn area_kbn,
       main.del_flg del_flg
FROM K_MST_TRADE_INDUSTRY_TYPE t,
     k_mst_trade_main main
WHERE  t.TRADE_CODE = main.trade_code(+)
AND  APPLY_YEAR BETWEEN /*wfgs2010Dto.kaisiNendo*/ AND /*wfgs2010Dto.endNendo*/
AND APPLY_BUSINESS_CODE=/*wfgs2010Dto.gyoumu*/
AND INDUSTRY_TYPE_KBN  = /*wfgs2010Dto.gyousyuHid*/
SELECT DISTINCT t.TRADE_CODE TRADE_CODE ,
  main.TRADE_NAME TRADE_NAME ,
  main.trade_name_kana trade_name_kana,
  main.area_kbn area_kbn,
  main.del_flg del_flg
FROM K_MST_TRADE_INDUSTRY_TYPE t,
  k_mst_trade_main main
WHERE t.TRADE_CODE = main.trade_code(+)
AND APPLY_YEAR BETWEEN '2009' AND '2019'
AND APPLY_BUSINESS_CODE='001'
AND INDUSTRY_TYPE_KBN  ='001'

 发现该字段是CHAR(4BYTE)

 

解决办法:在java中补全位数。使用Rpad( ,4,' ')或者Lpad( ,4,' ')

SELECT DISTINCT t.TRADE_CODE TRADE_CODE ,
              main.TRADE_NAME TRADE_NAME ,
             main.trade_name_kana trade_name_kana,
             main.area_kbn area_kbn,
             main.del_flg del_flg
    FROM K_MST_TRADE_INDUSTRY_TYPE t,
      k_mst_trade_main main
    WHERE  t.TRADE_CODE = main.trade_code(+)
   AND  APPLY_YEAR BETWEEN /*wfgs2010Dto.kaisiNendo*/ AND /*wfgs2010Dto.endNendo*/
   AND APPLY_BUSINESS_CODE=/*wfgs2010Dto.gyoumu*/
   AND INDUSTRY_TYPE_KBN  = Rpad(/*wfgs2010Dto.gyousyuHid*/,4,' ')

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值