SQL語句查詢時有欄位為中文時的解決方法
阿新 • • 發佈:2019-01-26
我在寫JDBC的是時候,遇見了因為在SQL語句中含有中文無法執行的情況,於是我把這句話放到mysql客戶端中測
試,結果通過,我就估計不是字元編碼問題,是PreparedStatement這個介面做了一些我不知道的處理導致這個問題的
發生。而且一般直接使用?問號代替動態查詢要求,而在客戶端中必須加上雙引號,於是我測試了一下直接把這個SQL
語句寫上去執行,結果沒問題,只是加上了兩個轉義字元\"。下面我把程式碼發上來、
- package oop.hu.ytu.dao;
- import java.sql.Connection;
-
import java.sql.PreparedStatement;
- import java.sql.ResultSet;
- import oop.hg.ytu.beans.LoginBean;
- import oop.hg.ytu.utils.JdbcUtils;
- /**
- * 處理使用者登入請求
- * @author Administrator
- *
- */
- publicclass LoginDomain {
- public LoginBean select(String tableName,String username){
- Connection con = null;
-
PreparedStatement pt = null
- ResultSet rs = null;
- LoginBean bean = new LoginBean();
- try {
- username = "\""+username+"\"";
- con = JdbcUtils.getConnection();
- String sql = "select name,password from "+tableName+" where name="+username+"";
-
pt = con.prepareStatement(sql);
- // pt.setString(1, tableName);
- // pt.setString(2, u);
- rs = pt.executeQuery();
- while(rs.next()){
- bean.setUsername(rs.getString("name"));
- bean.setPassword(rs.getString("password"));
- }
- } catch (Exception e) {
- thrownew RuntimeException(e);
- }finally{
- JdbcUtils.free(rs, pt, con);
- }
- return bean;
- }
- }
- username = "\""+username+"\"";這句話是進行字串處理,加上雙引號。
- <pre name="code"class="java" style="background-color: rgb(255, 255, 255); ">String sql = "select name,password from "+tableName+" where name="+username+"";
- 理就沒問題了。這個玩意很糾結我。總算解決的,長舒一口氣!