狂淘

          www.kuangtao.net

             :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            6 隨筆 :: 185 文章 :: 68 評論 :: 0 Trackbacks
           

          用JAVA/JSP做開發很久了,也見過許多朋友做過,有很大一部分用的是MYSQL的數據庫,現在MYSQL數據庫版本5.0及以上的都已經被用的很廣泛了,但一直有一個問題,使剛入門的朋友費勁心思.就是JSP連接MYSQL5數據庫的時候的一些中文問題.于是網絡上也出現了很多相關的帖子.由些大家對MYSQL5數據庫的配制文件MY.INI也有了些了解.甚至一些朋友就直接問:你們的MYSQL是什么編碼的?你們的TOMCAT是什么樣的編碼,可能不是很規范的問法,但說明了編碼問題的確影響了大家的使用.

          下面的講解是在MYSQL5.0.18,TOMCAT5.0.28,驅動為mysql-connector-java-3.2.0-alpha-bin.jar及以上版本的情況下測試的

          JSP連接數據庫的亂碼問題,分兩部分來看

          1 數據庫中是不是亂碼?

          我們需要保證數據庫保存的不是"?????"形式的亂碼,如何保證呢?

          我們在管理MYSQL數據庫的時候,需要用一個客戶端,無論你用MYSQL-FRONT,EMS SQL Manager for MySQL,還是MYSQL命令行,這些都是客戶端,也是程序連接了數據庫,我們現在用客戶端EMS SQL Manager for MySQL連接數據庫,連接的時候一定要設置客戶端字符集為GBK或者GB2312,這樣你才能知道數據庫里面是不是亂碼.這一編碼設置很重要,不然,就算數據庫里是中文,你看到的還是亂碼

          這樣連接后,我們看下我們做測試的表格,里面的漢字就是正常的,這個時候也可以直接在上面的記錄中進入中文的修改

          若這里沒有選擇編碼的話,一般默認的就是UTF8的了,連接后再看這個表格,就會出現亂碼

          而這個時候就會出現不能插入中文的問題,若您插入中文的話,就會出現下列錯誤

          這個時候大家什么不要誤解,不是不能插入中文,也不是你插入的字符太長,

          更改下連接編碼就OK了.下面是這個表格的SQL語句

          CREATE TABLE `test` (
          `name` varchar(100) default NULL,
          `adesc` varchar(100) default NULL
          ) ENGINE=InnoDB DEFAULT CHARSET=gb2312;

          二.程序連接數據時,也要設置好連接時候的編碼,JSP連接MYSQL數據庫時候,有個URL參數,jdbc:mysql://localhost:3307/sssdb?user=demoUser&password=demoPwd&useUnicode=true&characterEncoding=UTF-8,在這里需要設置成UTF-8,

          下面是連接數據庫的程序代碼

          <%@ page contentType="text/html;charset=GB2312" language="java"%>
          <%@ page import="java.io.*" %>
          <%@ page import="java.util.*" %>
          <%@ page import="java.sql.*" %>

          <%
          out.println("您的數據庫某表格中的內容如下<br>");
          try {
          Class.forName("com.mysql.jdbc.Driver").newInstance();
          String url ="jdbc:mysql://localhost:3307/sssdb?user=demoUser&password=demoPwd&useUnicode=true&characterEncoding=UTF-8";
          //testDB為你的數據庫名
          Connection conn= DriverManager.getConnection(url);
          Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
          String sql="select * from test";

          ResultSet rs=stmt.executeQuery(sql);
          while(rs.next()) {
          out.println("第一個字段內容:<font color=red>"+rs.getString(1)+"</font> 第二個字段內容:<font color=red>"+rs.getString(2)+"</font><br>");
          }
          out.print("數據庫操作成功,恭喜你");

          sql = "insert into test (name,adesc) values ('中文','漢字')";
          stmt.execute(sql);


          rs.close();
          stmt.close();
          conn.close();
          }
          catch(Exception e){
          System.out.println("數據庫連接不成功"+e.toString());
          }
          %>

          上面的經驗是經過多次嘗試總結出來的,不管是MYSQL的客戶端還是程序連接MYSQL數據庫,在本質上都是程序連接數據庫,可以自己在本地多試驗下,有時候有可能是驅動太舊

          posted on 2009-09-04 17:02 狂淘 閱讀(538) 評論(0)  編輯  收藏 所屬分類: jsp項目 傳到服務器問題
          主站蜘蛛池模板: 竹山县| 固镇县| 饶平县| 鄯善县| 洪泽县| 惠来县| 乌什县| 雅江县| 阆中市| 平塘县| 慈利县| 张家界市| 宝清县| 连山| 桂阳县| 石景山区| 拉萨市| 临沭县| 沽源县| 临沧市| 泽州县| 湄潭县| 神池县| 江陵县| 新津县| 阿克| 鄂托克旗| 泰和县| 高唐县| 兴宁市| 盐津县| 渭南市| 沙雅县| 同心县| 尚义县| 潼关县| 上饶县| 富锦市| 司法| 甘德县| 临武县|