我要写一个存储过程是一个查询语句,比如说:
create procedure getCust
as
select 这里是java程序里动态改变要查询的字段(因为业务要查得字段不固定,有可能是name,tel,address,也有可能是name,email,type) from t_cust
go
如果这个存储过程成立的话那java程序里又该怎么写?
哪位大虾知道的请帮我想想办法,感激不尽。

解决方案 »

  1.   

    上面没说清楚,我是既不知道这个存储过程该怎么写也不知道java里又该怎么写。
      

  2.   

    create procedure getCust @col varchar(2000)
     as
    begin
    declare @sqlstr varchar(3000)
     set @sqlstr='select '+@col+'  from t_cust'
    exec(@sqlstr)
    end--java 程序里调用时 传参 'a,b,c,d'  就是你想查的列串  就可以了
      

  3.   

    create procedure getCust(@str varchar(100))
    as
    begin
     exec('select '+@str+' from t_cust')
    end
    java调用sqlserver存储过程自己去搜,或者去java版问
      

  4.   


    那我java里那个while里面这样存值的时候会报错的,因为如果没有查这个字段的话,根本拿不到这一列:
    List<Collect> list=new ArrayList<Collect>();
    try {
    Class.forName("com.microsoft.sqlserver.jdbc.SQLServerDriver");
    Connection conn=DriverManager.getConnection( "jdbc:sqlserver://127.0.0.1:1433;databaseName=Test", "sa","as");
    PreparedStatement pstmt=conn.prepareStatement("{call dbo.getCollectbalance2(?)}");
    String sqlstr=this.field_c_id+","+this.field_balance_seg1_id+","+this.field_balance_seg2_id;
    pstmt.setString(1, sqlstr);
    ResultSet rs=pstmt.executeQuery();
    while (rs.next()) {
    Collect c=new Collect();
    c.setCId(rs.getInt(field_c_id));
    c.setBalanceSeg1Id(rs.getString(this.field_balance_seg1_id));
    c.setBalanceSeg2Id(rs.getString(this.field_balance_seg2_id));
    list.add(c);
    }
    for(int i=0;i<list.size();i++){
    System.out.println(list.get(i).getCId());
    System.out.println(list.get(i).getBalanceSeg1Id());
    System.out.println(list.get(i).getBalanceSeg2Id());
    }
    rs.close();
    pstmt.close();
    conn.close();
    } catch (Exception e) {
    e.printStackTrace();

    this.result=list;
    return "testProc";
    我只想到一个一个属性去判断,有没更好的办法?
      

  5.   

    2个思路。
    1,根据前台传入的参数在java里拼sql语句
    2、创建一个多参的存储过程,再根据入参是否为空拼sql语句