String one ="select c.name,c.sex,c.company ,c.officeAddress,c.officePhone  from  CardType t ,Contact c where t.uid=?  "; 
if(s!=null){
one+="and c.name=?and t.oid=c.typeid ";   
}else{   
one+="and t.oid=c.typeid ";   
}  query = getSession().createSQLQuery(one);    
query.setInteger(0,account.getUid().intValue());   
        if(s!=null){
         query.setString(1,s); 
         System.out.println("执行了吗???????????????????????????????");
        }
List list = query.list();                
request.setAttribute("cont",list);   
第一次进入else没有错,当输入了条件在点查找 就出错了  非要说query.setString(1,s);  这个有问题  就是2个条件的查询 第一次显示全部第二次根据条件来 异常信息是:java.lang.IllegalArgumentException: Positional parameter does not exist: 1 in query: select c.name,c.sex,c.company ,c.officeAddress,c.officePhone  from  CardType t ,Contact c where t.uid=?  and c.name=?and t.oid=c.typeid 
org.hibernate.impl.AbstractQueryImpl.setParameter(AbstractQueryImpl.java:328)
org.hibernate.impl.AbstractQueryImpl.setString(AbstractQueryImpl.java:434)
Actions.CardActions.allcn(CardActions.java:252)
sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
java.lang.reflect.Method.invoke(Method.java:597)
org.apache.struts.actions.DispatchAction.dispatchMethod(DispatchAction.java:274)
org.apache.struts.actions.DispatchAction.execute(DispatchAction.java:194)
org.apache.struts.action.RequestProcessor.processActionPerform(RequestProcessor.java:419)
org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:224)
org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
org.apache.struts.action.ActionServlet.doPost(ActionServlet.java:432)
javax.servlet.http.HttpServlet.service(HttpServlet.java:637)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
base.EncodingFilter.doFilter(EncodingFilter.java:33)

解决方案 »

  1.   

    说是参数不合法,你的s是String类型么
      

  2.   

     是String类型的 绝对是
      

  3.   

    java.lang.IllegalArgumentException: Positional parameter does not exist你用的hibernate吧,估计是hbm.xml对应关系没有配好!
      

  4.   

    应该是参数s的问题,你只是判断了s是否为null,没有判断s是否为""。即if(s!=null && s !="")才可以的。
      

  5.   

    当S!=null的时候 你的好像有两个占位符
    而你好像只是传递了一个参数
      

  6.   

    之前也跟别人说过 最好不要乱改动HQL语句 如果你改了的话你最好知道改完之后能有几个 ? 不然就是找死
      

  7.   

    总感觉有问题,如果执行if(s!=null){
    one+="and c.name=?and t.oid=c.typeid "; 
    }这句的话 就是有两个问号  你好像只给其中一个问号给了值吧?
    if(s!=null){
            query.setString(1,s);