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
@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()));
//………………
}
public Object doInCallableStatement(CallableStatement cs) throws SQLException, DataAccessException {
//………………
cs.setString(3, kssj);
cs.setString(4, jssj);
//………………
}
另外在sybase的sqladv中如下兩種調用方式均可正確返回結果: 



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()給數據庫傳參數只會日期部分。
如果改用如下代碼就可以:

