JDBC更新mysql数据库出乱码

xing3123 2011-08-20 03:01:15
--创建和定义一张表
DROP TABLE user ;
CREATE TABLE user(
id INT AUTO_INCREMENT PRIMARY KEY,
name VARCHAR(30) NOT NULL,
password VARCHAR(32) NOT NULL,
age INT NOT NULL,
sex VARCHAR(2) DEFAULT '男',
birthday DATE
) ;



java code:


import java.sql.Connection ;
import java.sql.PreparedStatement ;
import java.sql.DriverManager ;
import java.sql.ResultSet ;

public class ResultSetDemo{
public static final String DBDRIVER = "org.gjt.mm.mysql.Driver" ;
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn" ;
public static final String DBUSER = "root" ;
public static final String DBPASS = "mysqladmin" ;
public static void main(String args[]) throws Exception {
Class.forName(DBDRIVER) ;
Connection conn = null ;
ResultSet rs = null ;
PreparedStatement pstmt = null ;
String sql = "SELECT id,name,password,age,sex,birthday FROM user WHERE id=?" ;
conn = DriverManager.getConnection(DBURL,DBUSER,DBPASS) ;
pstmt = conn.prepareStatement(sql,
ResultSet.TYPE_SCROLL_SENSITIVE ,
ResultSet.CONCUR_UPDATABLE) ;
pstmt.setInt(1,4) ;
rs = pstmt.executeQuery() ;
rs.last() ;
rs.updateString("name","张三") ;
rs.updateRow() ;
rs.close() ;
pstmt.close() ;
conn.close() ;
}
}



该代码能正确执行,也能修改数据,但是数据修改后就出问题了,被修改的数据在数据库中显示为乱码,读取出来也为乱码。
主要错在修改数据后被修改的数据成为乱码。

在之前我详表里面插入了10条数据也是用JDBC方式插入,没有出现编码问题。

数据修改后:

mysql> SELECT * FROM user ;
+----+--------+--------------+-----+------+------------+
| id | name | password | age | sex | birthday |
+----+--------+--------------+-----+------+------------+
| 1 | 张三0 | www.mldn.cn0 | 22 | 男 | 2011-08-20 |
| 2 | 张三1 | www.mldn.cn1 | 23 | 男 | 2011-08-20 |
| 3 | 张三2 | www.mldn.cn2 | 24 | 男 | 2011-08-20 |
| 4 | 鍛ㄤ腹 | www.mldn.cn3 | 25 | 男 | 2011-08-20 |
| 5 | 张三4 | www.mldn.cn4 | 26 | 男 | 2011-08-20 |
| 6 | 张三5 | www.mldn.cn5 | 27 | 男 | 2011-08-20 |
| 7 | 张三6 | www.mldn.cn6 | 28 | 男 | 2011-08-20 |
| 8 | 张三7 | www.mldn.cn7 | 29 | 男 | 2011-08-20 |
| 9 | 张三8 | www.mldn.cn8 | 30 | 男 | 2011-08-20 |
| 10 | 张三9 | www.mldn.cn9 | 31 | 男 | 2011-08-20 |
+----+--------+--------------+-----+------+------------+
10 rows in set (0.00 sec)

如上所示:id 4, name 乱码。。。
...全文
208 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
beyoyo 2011-08-20
  • 打赏
  • 举报
回复
安装MYSQL的时候最好选择你现在用utf-8编码
dinglimin2009 2011-08-20
  • 打赏
  • 举报
回复
数据库的字符集最好用UTF-8....
TKD03072010 2011-08-20
  • 打赏
  • 举报
回复
sudan_727923 2011-08-20
  • 打赏
  • 举报
回复
PS:我把用户名密码都写在一个连接串中了:
"jdbc:mysql://localhost/mldn?user=root&password=12345ll&useUnicode=true&characterEncoding=gbk"
sudan_727923 2011-08-20
  • 打赏
  • 举报
回复
先看一下你的数据库和相应表的编码。然后在连接串中加上 编码方式
public static final String DBURL = "jdbc:mysql://localhost:3306/mldn&useUnicode=true&characterEncoding=gbk"
xing3123 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yktd26 的回复:]

看看你java文件啥编码?

错误的样子比较像utf-8被以gkb读出来了
[/Quote]

是utf-8的
xing3123 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 yktd26 的回复:]

看看你java文件啥编码?

错误的样子比较像utf-8被以gkb读出来了
[/Quote]

怎么看?
yktd26 2011-08-20
  • 打赏
  • 举报
回复
看看你java文件啥编码?

错误的样子比较像utf-8被以gkb读出来了
xing3123 2011-08-20
  • 打赏
  • 举报
回复
注明: 我的MySQL默认编码:gbk
xing3123 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 xing3123 的回复:]

注明: 我的MySQL默认编码:gbk
[/Quote]

就是*.java文件保存编码没有修改 应该改成ANSI。

谢谢你的指点
yktd26 2011-08-20
  • 打赏
  • 举报
回复
[Quote=引用 4 楼 xing3123 的回复:]

引用 2 楼 yktd26 的回复:

看看你java文件啥编码?

错误的样子比较像utf-8被以gkb读出来了


是utf-8的
[/Quote]
把源文件编码方式改成gkb试试

62,614

社区成员

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

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