word =new String(aa.getBytes("GBK"),"ISO8859_1");这一句不是以GBK读aa,然后把它转成ISO-8859-1再写进数据吗?但是ISO-8859-1不支持中文的.

解决方案 »

  1.   

    我提供方法你试试看:(前提是数据库的字符集为gbk)
    一是:aa不要再转换了,直接写入看看能不能成功.
    二是:String word=new String(aa.getBytes("ISO-8859-1"),"GBK");再插入数据库.
    三是:(我最常用的方法)
       String temp = "insert into admin(admin_name,admin_password) values(?,'123')";
       PreparedStatement pst = con.prepareStatement(temp);
       pst.setBytes(1,aa.getBytes("GBK"));
       pst.executeUpdate();
    希望对你有所帮助.
      

  2.   

    有了这两句
    <meta http-equiv="Content-Type" content="text/html; charset=gbk">   request.setCharacterEncoding("gbk");
    再将mysql数据库和表格全设置为gbk连接时characterEncoding=gbk肯定一切ok
      

  3.   

    多谢以上两位,我现在已经将中文字符正确插入了,但是又读不出来了?
    连接池配置如下:
    JNDI Name:  jdbc/admin   
    Data Source URL:  jdbc:mysql://localhost:3306/admin? useUnicode=true&characterEncoding=GBK  
    JDBC Driver Class:    com.mysql.jdbc.Driver
    User Name:    root
    Password:    *******
    Max. Active Connections:    4
    Max. Idle Connections:    2
    Max. Wait for Connection: 5000   
    Validation Query:   数据库配置如下:
    1.my.ini文件中的两个都设为
       default-character-set=gbk
    2.mysql中设定如下:
      mysql> status
    --------------
    mysql  Ver 14.12 Distrib 5.0.15, for Win32 (ia32)
    Connection id:          8
    Current database:
    Current user:           root@localhost
    SSL:                    Not in use
    Using delimiter:        ;
    Server version:         5.0.15-nt
    Protocol version:       10
    Connection:             localhost via TCP/IP
    Server characterset:    gbk
    Db     characterset:    gbk
    Client characterset:    gbk
    Conn.  characterset:    gbk
    TCP port:               3306
    Uptime:                 34 min 35 secThreads: 2  Questions: 72  Slow queries: 0  Opens: 0  Flush tables: 1  Open tabl
    es: 0  Queries per second avg: 0.035
    --------------mysql> show variables like 'character_set_%';
    +--------------------------+----------------------------------------------------
    -----+
    | Variable_name            | Value
         |
    +--------------------------+----------------------------------------------------
    -----+
    | character_set_client     | gbk
         |
    | character_set_connection | gbk
         |
    | character_set_database   | latin1
         |
    | character_set_results    | gbk
         |
    | character_set_server     | gbk
         |
    | character_set_system     | utf8
         |
    | character_sets_dir       | D:\Program Files\MySQL\MySQL Server 5.0\share\chars
    ets/ |
    +--------------------------+----------------------------------------------------
    -----+
    7 rows in set (0.02 sec)mysql> show variables like 'collation_%';
    +----------------------+-------------------+
    | Variable_name        | Value             |
    +----------------------+-------------------+
    | collation_connection | gbk_chinese_ci    |
    | collation_database   | latin1_swedish_ci |
    | collation_server     | gbk_chinese_ci    |
    +----------------------+-------------------+
    3 rows in set (0.00 sec)我的代码如下:
     <%@ page contentType="text/html;charset=GBK" %>
    <%@ page import="java.sql.*"%>
    <%@ page import="javax.sql.*"%>
    <%@ page import="javax.naming.*"%>
    <%@ page session="false" %>
    <html>
    <head>
    <meta http-equiv="Content-Type" content="text/html;charset=GBK">
    <title>数据库测试</title>
    <% 
       request.setCharacterEncoding("GBK");
       out.print("我的测试开始"+"<br/>");
       DataSource ds = null;
       Connection con=null;
       try{
       Context initCtx = new InitialContext(); 
       Context ctx = (Context) initCtx.lookup("java:comp/env"); 
       ds = (DataSource)ctx.lookup("jdbc/admin");
       con=ds.getConnection();
       Statement stmt = con.createStatement();
       String  aa="中国";
       String word=null;
      // word =new String(aa.getBytes("GBK"),"ISO8859_1");
          //正确写入
          word =new String(aa.getBytes("GBK"),"ISO8859_1");
          String temp = "insert into admin(admin_name,admin_password) values('" + word + "','123')";
       //   stmt.execute(first);
         // stmt.execute(second); 
      // PreparedStatement pst = con.prepareStatement(temp);
       PreparedStatement pst = con.prepareStatement(temp);
       pst.executeUpdate();
       pst.close();
       
       String strSql = "select * from admin";
       ResultSet rs =stmt.executeQuery(strSql);
       while(rs.next()){
          out.print("中国~~~" + rs.getString(1) +"<br/>");    
          
          String qq=new String (rs.getString(1).getBytes("ISO8859_1"),"GBK");
          out.println(qq+":");
         }
            rs.close();
            stmt.close();
           con.close();
      out.print("我的测试结束");
       }
       catch(Exception ex){
           out.print("出现例外,信息是:"+ex.getMessage());
           out.println(ex.getLocalizedMessage());
        ex.printStackTrace();
       }
    %>
    </head>
    <body>
    </body>
    </html>驱动都拷到相应目录下了,我的系统是xp2005
    程序中实现了,中文字符的插入,但是读不出中文字符,而且经过jsp文件插入后的数据库
    再不能删除记录了,不知为什么,请各位高手们指导小弟一下,我在此恭候大家的帮助.
      

  4.   

    把用.getBytes  转换编码的语句全部去掉,直接插入,直接取出……