String sql=null;
     String searchfield=new String(search.getSearchfield().getBytes("8859_1")); // value=1
     String keyword=new String(search.getKeyword().getBytes("8859_1"));  // value=1
     out.println("keyword:"+keyword);
     if(keyword =="1")
       {
          out.println("--in if ---");
          sql="select * from msdba.cl180 where "+searchfield+" like '%'||keyword||'%'";
          out.println("sql:"+sql);
       }
    else
      {
          out.println("--in else---");
          sql="select * from msdba.cl180 where "+searchfield+" like '%'||keyword||'%'";
          out.println("sql:"+sql);
       }
   输出的结果为:keyword:1
                 --in else---
                 select * from msdba.cl180 where 1 like '%'||keyword||'%'
                 
   结果是1就要进入if 里进行循环,却进入了else,用模糊查询却还是出现了变量'%'||keyword||'%',在oracle中应该是这样写呀

解决方案 »

  1.   

    '%" & keyword & "%'";
      

  2.   

    这里的keyword和searchfield是一样的,都是变量
      

  3.   

    '%" & keyword & "%'";
    换成&以后就报错了。好像不识别&符号
     用 sql="select * from msdba.cl180 where "+searchfield+"='"+keyword+"'";
    是可以查询成功的,不过我想模糊查询,按上面的写就不能实现了
      

  4.   

    你可以这样试一下:     if(keyword =="1")
           {
              out.println("--in if ---");
              sql="select * from msdba.cl180 where "+searchfield+" like '%1%'";
              out.println("sql:"+sql);
           }
      

  5.   

    因为在if里你的keyword已经=1了,所以like里就可以换成1了
      

  6.   

    把&换成+的结果和我的||是一样的结果
    输出的是:
    sql:select * from msdba.cl180 where 1 like '%'+keyword+'%'
      

  7.   

    我是说
    '%"+keyword+"%'"; 中间的是双引号,而你的是单引号。
      

  8.   

    因为你上面是在拼串,两个双引号之间的就是字段串了
    sql="select * from msdba.cl180 where "(到这里是字符串)+searchfield(变量)+" like '%'||keyword||'%'"(这中间还是字符串,你的变量keyword被看作字符了);
    所以要改成
    sql="select * from msdba.cl180 where "(到这里是字符串)+searchfield(变量)+" like '%"(字符串)+keyword(变量)+"%'"(字符串);