//这是调用存储过程的代码
public Vector<xsb> select(xsb b){
Vector<xsb> c = new Vector<xsb>();
String sql="{call selectxs(?,?,?,?,?,?)}";
DataBaseConnection conn=new DataBaseConnection();
CallableStatement cmd=null; 
    String xh=b.getXh();  
     String xm=b.getXm();
     String zy=b.getZy();
     String bj=b.getBj();
     String kch=b.getKch();
     String kcm=b.getKcm();
    
       try{cmd=conn.getConnection().prepareCall(sql);
   
       cmd.setString(1,b.getXh());
         cmd.setString(2,b.getXm());
         cmd.setString(3,b.getZy());
         cmd.setString(4,b.getBj());
         cmd.setString(5,b.getKch());
         cmd.setString(6,b.getKcm());     
        ResultSet rs= cmd.executeQuery();
       // c.addElement(b);
        while(rs.next()){
       xsb a=new xsb();
        a.setXh(rs.getString(1));
        a.setXm(rs.getString(2));
        a.setXb(rs.getString(3));
        a.setDate(rs.getString(4));
        a.setZy(rs.getString(5));
               a.setBj(rs.getString(6)) ;
               a.setXf(rs.getString(7));
        a.setBz(rs.getString(8));
        c.addElement(a);      
        } 
        return c;
       }catch(Exception e){System.out.print(e.getMessage());}
return c; }
//我的存储过程
USE [xscj]
GO
/****** 对象:  StoredProcedure [dbo].[selectxs]    脚本日期: 12/08/2010 02:44:25 ******/
SET ANSI_NULLS ON
GO
SET QUOTED_IDENTIFIER ON
GO
ALTER procedure [dbo].[selectxs]
@xh varchar(6),
@xm varchar(9),
@zy varchar(12),
@bj varchar(50),
@kch varchar(3),
@kcm varchar(16)
as
declare @sql varchar(500) 
declare @mql varchar(500) 
set @sql=' '
if(@xh is not  null)
begin
  set @sql=@sql+'and xsb.学号 like'+'''%'+@xh+'%'''+' '
end
if(@xm is not null)
begin  set @sql=@sql+'and xsb.姓名 like'+'''%'+@xm+'%'''
end 
if(@zy is not null)
begin
set @sql=@sql+'and xsb.专业 like'+'''%'+@zy+'%'''+' '
end
if(@bj is not null )
begin 
set @sql=@sql+'and xsb.班级 like'+'''%'+@bj+'%'''+' '
end 
if(@kch is not null)
begin
set @sql=@sql+'and cjb.课程号 like'+'''%'+@kch+'%'''+' '
end
if(@kcm is not null)
begin
set @sql=@sql+'and 课程名 like'+'''%'+@kcm+'%'''+' '
end
set @mql='select * from xsb where xsb.学号 in(select xsb.学号 from xsb left outer join cjb on (cjb.学号=xsb.学号)left outer join kcb on(kcb.课程号=cjb.课程号) where xsb.学号 is not null'+@sql+')'
exec(@mql)
//我的问题是 ~~
为什么我在调用存储过程的时候  例如 cmd.setString(6,b.getKcm());     这样就不行没有搜到结果 但 cmd.setString(6,“数学”);就可以了   这是咋回事啊  实在迷惑 而且我确定前台输入的值已经传到这个变量了呀  实在郁闷大家帮帮我  谢谢了