java调用存储历程的传送Date参数的问题[Java编程]
本文“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()可以将日期和时间部份都传给数据库.
以上是“java调用存储历程的传送Date参数的问题[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |