建了一個存儲過程
復制內容到剪貼板
代碼:
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()可以將日期和時間部分都傳給數據庫。