//这是调用存储过程的代码
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,“数学”);就可以了 这是咋回事啊 实在迷惑 而且我确定前台输入的值已经传到这个变量了呀 实在郁闷大家帮帮我 谢谢了
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,“数学”);就可以了 这是咋回事啊 实在迷惑 而且我确定前台输入的值已经传到这个变量了呀 实在郁闷大家帮帮我 谢谢了
解决方案 »
免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货