程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Java調用存儲過程的傳遞Date參數的問題

Java調用存儲過程的傳遞Date參數的問題

編輯:關於JAVA

建了一個存儲過程

復制內容到剪貼板

代碼:

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(3, new Java.sql.Date(kssj.getTime()));

cs.setDate(4, new 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(3, new Java.sql.Timestamp(dKssj.getTime()));

cs.setTimestamp(4, new Java.sql.Timestamp(dJSsj.getTime()));

cs.setTimestamp()可以將日期和時間部分都傳給數據庫。

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved