解决SQL语句中含有中文字符无法查询问题

上一篇 / 下一篇  2012-04-17 09:44:49 / 个人分类:数据库

我在写JDBC的是时候,遇见了因为在SQL语句中含有中文无法运行的情况,于是我把这句话放到mysql客户端中测试,结果通过,我就估计不是字符编码问题,是PreparedStatement这个接口做了一些我不知道的处理导致这个问题的发生。而且一般直接使用?问号代替动态查询要求,而在客户端中必须加上双引号,于是我测试了一下直接把这个SQL语句写上去运行,结果没问题,只是加上了两个转义字符\"。下面我把代码发上来

s!b1rA"bj)l H0

]*m*M4N?5hG$w0

IxTVq#?$o'c5fs0package oop.hu.ytu.dao;

v|7NDAF*K0

NJ\Q*k5J4f0importjava.sql.Connection;51Testing软件测试网e*b!FCg.F*D
import java.sql.PreparedStatement;
;m.K6@6ZZO b0import java.sql.ResultSet;51Testing软件测试网i q([F.G~/z
import oop.hg.ytu.beans.LoginBean;
L9xO"`J_"r0import oop.hg.ytu.utils.JdbcUtils;

ZI9lFf m$V G;M;]0

h/L*O}(s1VN0/**
O9c il%a!b0tf5ce0 * 处理用户登录请求51Testing软件测试网b"_W&dn2p u*En/}1[
 * @author Administrator51Testing软件测试网U!v ?|N
 *
$|6bA;@O.K6y^f-m0 */51Testing软件测试网D*o P-`Z
public class LoginDomain {
Xe0R4O$m|$i9~0 public LoginBean select(String tableName,String username){51Testing软件测试网5N/gfS'j"\ ve
  Connection con = null;51Testing软件测试网#VZ`ZTP;M n
  PreparedStatement pt = null;
6l7x)p*lk8y U0  ResultSet rs = null;
:CzW/U#Y0  LoginBean bean = new LoginBean();
&Sp:oQGPM9iG0  
zPv-Anh JK!k0  try {
%pR,`7Q/~8}0   username = "\""+username+"\"";51Testing软件测试网Nb(u6bHb;b
   con = JdbcUtils.getConnection();51Testing软件测试网 |/Y0I#I9\:[
   String sql = "select name,password from "+tableName+" where name="+username+"";51Testing软件测试网we:RS(QV!B8?;_ J
   pt = con.prepareStatement(sql);
IBp D kZ k0Jz8J9O)Da0  // pt.setString(1, tableName);
%lvy.j~0Y0  // pt.setString(2, u);
i!G$u/f;L` nZ0   rs = pt.executeQuery();51Testing软件测试网HA)S(}3L4Lr9cY
   while(rs.next()){51Testing软件测试网!a8^Z:}o%Zb)jK!?
    bean.setUsername(rs.getString("name"));51Testing软件测试网*C0Ul&j;Hj L
    bean.setPassword(rs.getString("password"));
]v$WR%jm2BDL0   }
C"? E A-rSUz0  } catch (Exception e) {51Testing软件测试网;SRjV9EvX @
   throw new RuntimeException(e);
{2q \k.yH4A:fMw0  }finally{
0S c|%n0D Q.a s0   JdbcUtils.free(rs, pt, con);
,oG!G,qu:a4s9|;[0  }
ryb0LW\N%~0  return bean;51Testing软件测试网5Ew{*YR
 }51Testing软件测试网3j'D4Ea5@ F/Tu`f
}

`_?Lz:q7L[~!U0

(gRV|g051Testing软件测试网i:G|~;N6x

51Testing软件测试网 OY8|0_F2OhT

51Testing软件测试网 K7Mn V!q$eT[,U]

username = "\""+username+"\"";这句话是进行字符串处理,加上双引号。
51Testing软件测试网] vLyt8ZcE&L-U

51Testing软件测试网'S;tQ b~%j D

b1N \)s+x |051Testing软件测试网8@;EOFx-Rg

<pre name="code" class="java" style="background-color: rgb(255, 255, 255); ">String sql = "select name,password from "+tableName+" where name="+username+"";
51Testing软件测试网h&k \{+ECf

51Testing软件测试网+]E4Y7Z#Fow.X

%O6YId1t7]8K_-SL%d0  这句话是重点,一定不能使用PreparedStatement提供的字符串处理方法,一定要直接自己拼接出字符串来运行,这样对于中文的处理就没问题了。这个玩意很纠结我。总算解决的,长舒一口气!

,U|;_:??p0

TAG:

 

评分:0

我来说两句

Open Toolbar