1. 程式人生 > >SQL語句查詢時有欄位為中文時的解決方法

SQL語句查詢時有欄位為中文時的解決方法

我在寫JDBC的是時候,遇見了因為在SQL語句中含有中文無法執行的情況,於是我把這句話放到mysql客戶端中測

試,結果通過,我就估計不是字元編碼問題,是PreparedStatement這個介面做了一些我不知道的處理導致這個問題的

發生。而且一般直接使用?問號代替動態查詢要求,而在客戶端中必須加上雙引號,於是我測試了一下直接把這個SQL

語句寫上去執行,結果沒問題,只是加上了兩個轉義字元\"。下面我把程式碼發上來、

  1. package oop.hu.ytu.dao;  
  2. import java.sql.Connection;  
  3. import java.sql.PreparedStatement;  
  4. import java.sql.ResultSet;  
  5. import oop.hg.ytu.beans.LoginBean;  
  6. import oop.hg.ytu.utils.JdbcUtils;  
  7. /** 
  8.  * 處理使用者登入請求 
  9.  * @author Administrator 
  10.  * 
  11.  */
  12. publicclass LoginDomain {  
  13.     public LoginBean select(String tableName,String username){  
  14.         Connection con = null;  
  15.         PreparedStatement pt = null
    ;  
  16.         ResultSet rs = null;  
  17.         LoginBean bean = new LoginBean();  
  18.         try {  
  19.             username = "\""+username+"\"";  
  20.             con = JdbcUtils.getConnection();  
  21.             String sql = "select name,password from "+tableName+" where name="+username+"";  
  22.             pt = con.prepareStatement(sql);  
  23.         //  pt.setString(1, tableName);
  24.         //  pt.setString(2, u);
  25.             rs = pt.executeQuery();  
  26.             while(rs.next()){  
  27.                 bean.setUsername(rs.getString("name"));  
  28.                 bean.setPassword(rs.getString("password"));  
  29.             }  
  30.         } catch (Exception e) {  
  31.             thrownew RuntimeException(e);  
  32.         }finally{  
  33.             JdbcUtils.free(rs, pt, con);  
  34.         }  
  35.         return bean;  
  36.     }  
  37. }  

  1. username = "\""+username+"\"";這句話是進行字串處理,加上雙引號。  
  1. <pre name="code"class="java" style="background-color: rgb(255, 255, 255); ">String sql = "select name,password from "+tableName+" where name="+username+"";  
這句話是重點,一定不能使用PreparedStatement提供的字串處理方法,一定要直接自己拼接出字串來執行,這樣對於中文的處
  1. 理就沒問題了。這個玩意很糾結我。總算解決的,長舒一口氣!