在数据库中有一个表:message,有三个字段:
Field  Type 
from   varchar(20)
to     varchar(20)
msg    varchar(30)
现在从程序中向表中插入数据:
String from =msg.getFromUser().toString();
String message = msg.getMessage().toString();
Connection con = getConnection();
Statement st;
try {         
 st =con.createStatement(); 
 String sql = " select id,ip from user  ";             
 ResultSet rs=st.executeQuery(sql);      
 while(rs.next())
    {                
        String id = rs.getString(1);
        String IP=rs.getString(2);      
                String to = id;
                String sql2 = "insert into message values ('"+from+"','"+to+"','"+message+"')";
                st.execute(sql2);
            }
    }catch(Exception e){e.printStackTrace();} 结果报错:
java.sql.SQLException: Incorrect string value: '\xE3\x80\x90\xE9\x80\x9A...' for column 'msg' at row 1
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:946)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:2870)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1573)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:1665)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3170)
at com.mysql.jdbc.Connection.execSQL(Connection.java:3099)
at com.mysql.jdbc.Statement.execute(Statement.java:695)
at Server.RequestProcessor.chat(RequestProcessor.java:303)
at Server.RequestProcessor.run(RequestProcessor.java:55)
at java.lang.Thread.run(Thread.java:662)

解决方案 »

  1.   

    把你的message打印出来,看看是什么东西
      

  2.   

    System.out.println(from+":"+to+message);
    结果就是发送的消息,很对。
      

  3.   

    打印一下组装后sql2的值.看看是什么值.估计是编码有点问题吧
      

  4.   

    编码 不统一
    jdbc:mysql://127.0.0.1/SSH?characterEncoding=utf-8和数据库对应
      

  5.   

    System.out.println(sql2);
    结果是insert into message values ('sa','lxj',' 通知四年级')
    没有错啊
      

  6.   

    //这是连接数据库部分
        public static Connection getConnection(){
         Connection con = null;
         try{
             Class.forName("com.mysql.jdbc.Driver");
                con = DriverManager.getConnection("jdbc:mysql://localhost/sms?useUnicode=true&characterEncoding=utf-8", "root", "123456");              
         }catch(Exception e){e.printStackTrace();}
         return con;
         }
      

  7.   

    你安装mysql的时候有个字符集选择的,如果那里不是utf-8,你在程序里面设置也没用,你不妨将那条语句在mysql控制台插入一下,如果能插入,那在程序里面应该没问题。自己要学会调试程序。如果在mysql控制台都插入有误,你可将mysql重新配置一下。
      

  8.   

    试试看,String sql2 = "insert into message values ('"+from+"','"+to+"',"+message+")";
    插入varchar是不需要单引号的
      

  9.   

    还有,建议尽量不要用这种拼接式的插入语句,举例如果你message字符串里面有个单引号,肯定会出问题。还是用PreparedStatement吧。
    如果message内容是It's my flower.那么拼出来的语句如下:
    insert into message values ('Hello','World','It's my flower.')"
    肯定会有错。
      

  10.   

    你可以把message的中文换成英文看看会不会报错,应该是中文编码问题