java调用存储过程的传递Date参数的问题

建了一个存储过程
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( 3 new  java.sql.Timestamp(dKssj.getTime()));
cs.setTimestamp(
4 new  java.sql.Timestamp(dJssj.getTime()));
cs.setTimestamp()可以将日期和时间部分都传给数据库。

你可能感兴趣的:(java调用存储过程的传递Date参数的问题)