研究了很多天,才发现是向数据库传递中文参数出的问题String sql = "select * from view_teacourse where username=? or course_name=?";
      PreparedStatement pstmt = conn.prepareStatement(sql);
      pstmt.setString(1, "于禁");
      pstmt.setString(2, "于禁");
      ResultSet rs = pstmt.executeQuery();
按照上述代码,可以得到一个ResultSet,并且rs不为空,但却取不出相对应的结果。
将“于禁”换成“Tom”后可以得到正确的结果。
跪求,如何解决setString方法中中文传递不正确的问题呢?PS:我的数据库的配置文件已经设置了#init_connect='SET NAMES gbk'Java Web乱码MYSQL

解决方案 »

  1.   

    楼主试试:
    select * from view_teacourse where username='于禁' or course_name='于禁'
    如果这样数据库查不到的话,说明项目编码与数据库的不一致啊。
      

  2.   


    果真不可以....换成Tom就可以了。。如何设置项目编码?我用的都是默认的...IDE是Myeclipse
      

  3.   

    要在java里面和数据库编码一致。你可以写个过滤器,对中文进行过滤并且与数据库编码保持一致。
      

  4.   

    1.数据库编码与后台一致,utf-82.web.xml里添加过滤器,ru:
    <!-- encoding Filter  -->
      <filter>
       <filter-name>encodingFilter</filter-name>
      <filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
      <init-param>
       <param-name>encoding</param-name>
       <param-value>UTF-8</param-value>
      </init-param>
      <init-param>
       <param-name>forceEncoding</param-name>
       <param-value>true</param-value>
      </init-param>  
      </filter>   
     <filter-mapping>
         <filter-name>encodingFilter</filter-name>
     <url-pattern>/*</url-pattern>
      </filter-mapping>
      
      

  5.   

    在最后加上这句,mysql_query("SET NAMES UTF8");