异异异...异常来袭:
java.sql.SQLException: Incorrect string value: '\xE3\x80\x90\xE9\x80\
在数据库中有一个表: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)
------解决方案--------------------把你的message打印出来,看看是什么东西
------解决方案--------------------你插入的数据中有中文吗?如果有可能是因为你的数据库字符编码不支持中文吧
------解决方案--------------------编码问题。。。。。
------解决方案--------------------打印一下组装后sql2的值.看看是什么值.估计是编码有点问题吧
------解决方案--------------------编码不统一
------解决方案--------------------编码 不统一
jdbc:mysql://127.0.0.1/SSH?characterEncoding=utf-8和数据库对应
------解决方案--------------------你安装mysql的时候有个字符集选择的,如果那里不是utf-8,你在程序里面设置也没用,你不妨将那条语句在mysql控制台插入一下,如果能插入,那在程序里面应该没问题。自己要学会调试程序。如果在mysql控制台都插入有误,你可将mysql重新配置一下。
------解决方案--------------------试试看,String sql2 = "insert into message values ('"+from+"','"+to+"',"+message+")";
插入varchar是不需要单引号的
------解决方案--------------------还有,建议尽量不要用这种拼接式的插入语句,举例如果你message字符串里面有个单引号,肯定会出问题。还是用PreparedStatement吧。
如果message内容是It's my flower.那么拼出来的语句如下:
insert into message values ('Hello','World','It's my flower.')"
肯定会有错。
------解决方案--------------------你可以把message的中文换成英文看看会不会报错,应该是中文编码问题