歲月如哥
          人生非夢
          posts - 50,comments - 144,trackbacks - 0
          建了一個存儲過程
          create procedure PR_YDFT_GETFT_TIME        
            
          @AJLB      tinyint,            -- 案件類別           
            @AJBHLIST  varchar(1500),      -- 案件編號列表
            @KSSJ      datetime,           -- 開始時間
            @JSSJ      datetime            -- 結束時間 

          as 
          begin
          …………
          select BH, AH from K_ZS..B_ZX where(這里返回一個結果集)
          end

          在java代碼中如下調用(時間類型為java.sql.Date),即使數據有數據,也不能正確返回結果集:
           public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
               
          //………………                                                
               cs.setDate(3new java.sql.Date(kssj.getTime()));
               cs.setDate(
          4new java.sql.Date(jssj.getTime()));
               
          //………………                                                                                    
          }
          但是將方法改為如下(時間類型為String),就可以正常返回結果集:
          public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
              
          //………………
               cs.setString(3, kssj);
              cs.setString(
          4, jssj);
              
          //………………                                                                                      
            }


             
          另外在sybase的sqladv中如下兩種調用方式均可正確返回結果:
          use K_RW
          go
          PR_YDFT_GETFT_TIME 
          2, "109052298;", "2008-08-19 14:00:00", "2008-08-19 17:00:00"
          use K_RW
          go
          declare @KSSJ datetime 
          declare @JSSJ datetime 
          select @KSSJ = convert(datetime,"2008-08-19 14:00:00")
          select @JSSJ =  convert(datetime,"2008-08-19 17:00:00")
          execute PR_YDFT_GETFT_TIME 2, "109052298;", @KSSJ ,@JSSJ
          在java代碼中調用只是將java.sql.Date參數類型改為String傳遞就能正常返回結果集,是不是因為sybase的驅動問題


          問題原因找到了,是因為使用cs.setDate()給數據庫傳參數只會日期部分。
          如果改用如下代碼就可以:
          cs.setTimestamp(3new java.sql.Timestamp(dKssj.getTime()));
          cs.setTimestamp(
          4new java.sql.Timestamp(dJssj.getTime()));
          cs.setTimestamp()可以將日期和時間部分都傳給數據庫。
          posted on 2008-08-30 14:53 歲月如歌 閱讀(1805) 評論(1)  編輯  收藏 所屬分類: java

          FeedBack:
          # re: java調用存儲過程的傳遞Date參數的問題
          2008-09-01 09:47 | yz
          支持作者的原創文章,通過作者的幾篇文章,對儲存過程的應用多了一些了解,非常感謝!  回復  更多評論
            
          主站蜘蛛池模板: 蓬安县| 海阳市| 清丰县| 阿城市| 株洲市| 盈江县| 若羌县| 章丘市| 黄平县| 四平市| 垦利县| 云安县| 泸西县| 平舆县| 东兴市| 桂阳县| 南阳市| 鄄城县| 灵寿县| 福泉市| 尉氏县| 巴彦县| 科技| 青川县| 夏津县| 苏州市| 南丹县| 呼伦贝尔市| 曲沃县| 小金县| 阿克| 峡江县| 长寿区| 迭部县| 阿克苏市| 慈溪市| 公主岭市| 青阳县| 桐乡市| 南召县| 阿拉善盟|