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

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

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

51Testing软件测试网 ^5m5pUnU

s}&e Lj _A0package oop.hu.ytu.dao;

$bsz x$G0

"Xk:u RQ0importjava.sql.Connection;51Testing软件测试网,j7_'KGq'zl5l
import java.sql.PreparedStatement;51Testing软件测试网6e7CF:Z7}N.e
import java.sql.ResultSet;51Testing软件测试网ZuK%bG)o]e'?P.|
import oop.hg.ytu.beans.LoginBean;51Testing软件测试网aj6q~bh
import oop.hg.ytu.utils.JdbcUtils;

|6w|b Tn051Testing软件测试网/gA+x?6}FI$RH

/**51Testing软件测试网\k7L)U)QUP;d
 * 处理用户登录请求
`Cr!K$R)`)r0 * @author Administrator51Testing软件测试网)RKZ^RA/x};q
 *51Testing软件测试网$Nc,WO,F$B _g
 */
8Z5Y E7j*A~q\0public class LoginDomain {
m*_Z)l/Jhxu0 public LoginBean select(String tableName,String username){51Testing软件测试网+P(x-N AZ3z'd0J
  Connection con = null;51Testing软件测试网1KIgtjT1S
  PreparedStatement pt = null;
:f7d{%FDDG$@&i%sw0  ResultSet rs = null;51Testing软件测试网],h#AD^S
  LoginBean bean = new LoginBean();51Testing软件测试网1n'_Pd kUo H
  
p p"M2|UN0  try {
rC-UQq9\}y]0   username = "\""+username+"\"";
Uqy,^@YZL0   con = JdbcUtils.getConnection();51Testing软件测试网3^ A'x\-]"bB
   String sql = "select name,password from "+tableName+" where name="+username+"";51Testing软件测试网/_!g4rDV S-M1fz'oh
   pt = con.prepareStatement(sql);
[*A0jIL7S0  // pt.setString(1, tableName);51Testing软件测试网H @3{Z6\ wo
  // pt.setString(2, u);
Jz T'Fp[*n/q,V0   rs = pt.executeQuery();
*`j{[D1n/B6o0   while(rs.next()){
8B"L&n{+Z"|0    bean.setUsername(rs.getString("name"));51Testing软件测试网"]Zq*T"@
    bean.setPassword(rs.getString("password"));51Testing软件测试网A}2Z'qC$\u;O9r/b&[t
   }
Cv3u3S^"[0  } catch (Exception e) {
Zwe0kl'O0   throw new RuntimeException(e);
"kA(K6ze%E.Q4iHhg u0  }finally{51Testing软件测试网q]EZ1K@'R;Ef
   JdbcUtils.free(rs, pt, con);51Testing软件测试网g;[2j2Y#N6l|5D
  }
M+oA D}sa c0  return bean;
,W~ w7O5hj U{!du0 }
V+J"w,yYQz n$Im3q0}

4oV4}Q6h XDm0

c |"C9T[051Testing软件测试网3Z8XG0tS

51Testing软件测试网C:W5X9q%Xwhi

51Testing软件测试网R'P!vS7`} a:iI_`

username = "\""+username+"\"";这句话是进行字符串处理,加上双引号。

~[-[E:{k051Testing软件测试网L ] k Rt q

51Testing软件测试网5o"oJ` t*fi

51Testing软件测试网t Jx0a*[5p

<pre name="code" class="java" style="background-color: rgb(255, 255, 255); ">String sql = "select name,password from "+tableName+" where name="+username+"";

O%eR.G-]j%A0ob0

"N(xUDM:CsX0

#_"tw+?v7o\+Yf0  这句话是重点,一定不能使用PreparedStatement提供的字符串处理方法,一定要直接自己拼接出字符串来运行,这样对于中文的处理就没问题了。这个玩意很纠结我。总算解决的,长舒一口气!51Testing软件测试网5K5QTu*N)] d{+Q7`


TAG:

 

评分:0

我来说两句

Open Toolbar