我试过PreparedStatment,将查询内容处,用?代替,但是不行,会出错,只能将like变成=。但是,这样就不是模糊查询了。该如何处理呀?

解决方案 »

  1.   

    可以在程序中控制
    String.replaceall(str,"'","''");
      

  2.   

    出错了,见下。replaceall()这个函数不知道该怎么使用,系统总是说没找到。比如一个字符串SoftName怎么将它里面的一个单引号变成两个呢?是不是SoftName.replace(SoftName,"'","''"),可是我试了,有错误.type Exception reportmessage Internal Server Errordescription The server encountered an internal error (Internal Server Error) that prevented it from fulfilling this request.exception org.apache.jasper.JasperException: Unable to compile class for JSPAn error occured between lines: 26 and 120 in the jsp file: /Result.jspGenerated servlet error:
    C:\tomcat\work\localhost\test\Result$jsp.java:98: Method Replaceall(java.lang.String, java.lang.String, java.lang.String) not found in class java.lang.String.
                     SoftName=SoftName.Replaceall(SoftName,"'","''");
                                                 ^
    1 error at org.apache.jasper.compiler.Compiler.compile(Compiler.java:284)
    at org.apache.jasper.servlet.JspServlet.loadJSP(JspServlet.java:546)
    at org.apache.jasper.servlet.JspServlet$JspServletWrapper.loadIfNecessary(JspServlet.java:177)
    at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:189)
    at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:382)
    at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:474)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:201)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2344)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:164)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:462)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:163)
    at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
    at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
    at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
    at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1011)
    at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1106)
    at java.lang.Thread.run(Unknown Source)--------------------------------------------------------------------------------
      

  3.   

    String sql=".....LIKE ?....." stmt.setString(1, "%" + stringContent+ "%");
      

  4.   

    不是吧单引号可不可以这样表示/" /'
    我也说不准可以一找一下相关的jsp的换法
      

  5.   

    PreparedStatement 是可以满足你的要求的,
    不知道你是怎么使用它???
      

  6.   

    String sql=".....LIKE '"+"%"+stringContent+"%"+"'....."
      

  7.   

    用replaceall();下载一个高版本的jdk应该没有问题了
      

  8.   

    我是这么使得(如下),但是,查询结果总是为空,不知道为什么?
    Sql="select MasterID,MasterName,MasterLevel = CASE WHEN MasterInfo.MasterLevel = '1' THEN '☆' WHEN MasterInfo.MasterLevel = '2' THEN '☆☆' WHEN MasterInfo.MasterLevel = '3' THEN '☆☆☆' WHEN MasterInfo.MasterLevel = '4' THEN '☆☆☆☆' WHEN MasterInfo.MasterLevel = '5' THEN '☆☆☆☆☆' END,MasterClick,MasterDesc from MasterInfo,TypeInfo where MasterInfo.TypeID=TypeInfo.TypeID and ParentID=? and MasterName like ? order by MasterLevel desc,MasterName";PreparedStatement pstmt=con.prepareStatement(Sql);pstmt.setString(1,SoftKind);pstmt.setString(2,"\'%"+SoftName+"%\'");pstmt.excuteQuery();
      

  9.   

    我的JDK的版本不能够随便的升级,这不是我能够作决定的,那又该如何呢?
      

  10.   

    自己写一个方法吧,查找单引号的index,多加入一个,保证解决。
    就用indexOf()和substring()就可以了吧!
      

  11.   

    用String.replaceall(str,"'","''");就可以了
    但这个方法JDK1.4里才有用,楼主如果你用的不是1.4那就自己写一个算法吧,不难的
      

  12.   

    OK!
    Thank You!
    interliu()!