异异异...异常来袭:java.sql.SQLException: Incorrect string value: '\xE3\x80\x90\xE9\x80\

jiaojiao_huihui 2011-11-25 08:05:05
在数据库中有一个表: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)
...全文
1165 15 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
海逸_2018 2011-11-29
  • 打赏
  • 举报
回复
你可以把message的中文换成英文看看会不会报错,应该是中文编码问题
cpoysy 2011-11-29
  • 打赏
  • 举报
回复
还有,建议尽量不要用这种拼接式的插入语句,举例如果你message字符串里面有个单引号,肯定会出问题。还是用PreparedStatement吧。
如果message内容是It's my flower.那么拼出来的语句如下:
insert into message values ('Hello','World','It's my flower.')"
肯定会有错。
smst1987 2011-11-29
  • 打赏
  • 举报
回复
试试看,String sql2 = "insert into message values ('"+from+"','"+to+"',"+message+")";
插入varchar是不需要单引号的
cpoysy 2011-11-29
  • 打赏
  • 举报
回复
你安装mysql的时候有个字符集选择的,如果那里不是utf-8,你在程序里面设置也没用,你不妨将那条语句在mysql控制台插入一下,如果能插入,那在程序里面应该没问题。自己要学会调试程序。如果在mysql控制台都插入有误,你可将mysql重新配置一下。
jiaojiao_huihui 2011-11-29
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 xiangjai 的回复:]

编码 不统一
jdbc:mysql://127.0.0.1/SSH?characterEncoding=utf-8和数据库对应
[/Quote]
//这是连接数据库部分
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;
}
jiaojiao_huihui 2011-11-29
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 awusoft 的回复:]

打印一下组装后sql2的值.看看是什么值.估计是编码有点问题吧
[/Quote]
System.out.println(sql2);
结果是insert into message values ('sa','lxj',' 通知四年级')
没有错啊
xiangjai 2011-11-29
  • 打赏
  • 举报
回复
编码 不统一
jdbc:mysql://127.0.0.1/SSH?characterEncoding=utf-8和数据库对应
24K純帥 2011-11-29
  • 打赏
  • 举报
回复
编码不统一
awusoft 2011-11-29
  • 打赏
  • 举报
回复
打印一下组装后sql2的值.看看是什么值.估计是编码有点问题吧
jiaojiao_huihui 2011-11-29
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 kankan231 的回复:]

你插入的数据中有中文吗?如果有可能是因为你的数据库字符编码不支持中文吧
[/Quote]
在同一个程序中还有注册板块,其中包括用户名,院系等都是中文,而且可以正确插入数据库
jiaojiao_huihui 2011-11-29
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 ghsau 的回复:]

把你的message打印出来,看看是什么东西
[/Quote]
System.out.println(from+":"+to+message);
结果就是发送的消息,很对。

zgpinguo 2011-11-29
  • 打赏
  • 举报
回复
编码问题。。。。。
kankan231 2011-11-29
  • 打赏
  • 举报
回复
你插入的数据中有中文吗?如果有可能是因为你的数据库字符编码不支持中文吧
  • 打赏
  • 举报
回复
把你的message打印出来,看看是什么东西
jiaojiao_huihui 2011-11-29
  • 打赏
  • 举报
回复
这么多天依然没有人回答自己的问题

62,634

社区成员

发帖
与我相关
我的任务
社区描述
Java 2 Standard Edition
社区管理员
  • Java SE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧