同样的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,' ')

猜你喜欢

转载自blog.csdn.net/lsh15846393847/article/details/82874951