最近都比较闲,写个Struts2+Hibernate的CRUD玩玩,我好久没有写自己能看得懂的java代码了。。。新手的悲哀~写S2H基本上都是一顿配置,写点业务层的增删改查方法就好了,写起来也比较顺手,一会儿就写完了(大概一个多小时~,不要笑我!)tomcat部署一下试试效果,注册用户。。。查看注册后的用户列表,乱码了~为什么呢?为什么呢?这个问题以前写项目玩的时候也出现过,不过好久远了,我不知道是哪种原因~
页面没有用统一的编码?页面的编码与数据库的编码格式不一致?表单传入的值是不是就已经是乱码了?是不是插入数据库正常但是从数据库读取时候产生乱码?在web.xml中加个过滤器试试?
页面都使用了统一的编码UTF-8,页面传入到action中获得的表单值没有问题,加了过滤器,还是乱码!!!
慢慢找出问题出现在哪块,我修改了数据库中一条数据,页面读取不显示乱码,那么问题就出现在往数据库中插入数据了,我用的是mysql数据库,mysql数据的编码机制是怎么回事?上网搜搜~
MySQL的编码机制:
1、数据库级别的编码:数据库服务器上允许建立不同编码的数据库,在数据库建立时需要指定编码;(这个我没有设置。。。)
2、表级别的编码:同一个数据库中可以建立不同编码的表,在表建立时需要指定编码,默认为用户连接时的编码;
我的建表语句:
CREATE TABLE `users` (
`Id` int(11) NOT NULL auto_increment, `username` char(20) default NULL COMMENT '登录帐号', `password` char(20) default NULL COMMENT '登录密码', `birthday` date default NULL COMMENT '出生日期', `phone` char(20) default NULL COMMENT '联系电话', `address` varchar(100) default NULL COMMENT '联系地址', `email` varchar(100) default NULL COMMENT 'email', `regdate` datetime default NULL COMMENT '注册时间', PRIMARY KEY (`Id`) ) ENGINE=MyISAM DEFAULT CHARSET=gb2312 COMMENT='用户表';设置默认的建表编码为gb2312~
3、表字段级别的编码:同一个表中可以建立不同编码的字段,默认为表的编码,要对字段指定特殊的编码,必须在字段中明确指定编码格式;(这个没有影响)
4、建立数据库连接时的编码:用户可以在建立数据库连接时指定编码,默认为服务器的配置。(这块?我的driveURL?去看看配置文件~)
在hibernate.cfg.xml文件中原来的数据库连接配置爱信息:
<hibernate-configuration>
<session-factory>
<property name="dialect"> org.hibernate.dialect.MySQLDialect </property> <property name="connection.url"> jdbc:mysql://localhost:3306/bjsl </property> <property name="connection.username">root</property> <property name="connection.password">root</property> <property name="connection.driver_class"> com.mysql.jdbc.Driver </property> <property name="myeclipse.connection.profile">bjsl</property> <mapping resource="po/Users.hbm.xml" /></session-factory>
</hibernate-configuration>
黑体字部分没有指定编码,那就指定一下:
<property name="connection.url"> <![CDATA[ jdbc:mysql://localhost:3306/bjsl?useUnicode=true&characterEncoding=GB2312 ]]> </property>再去重新启动一下tomcat,ok!原来是这块有毛病!
哎,我真得好好去复习复习一下以前学过的东西了,且不说写个增删改查出现问题了,写个这么个东西花了我两三个小时,这速度,这效率,弱爆了!