jsp mysql 查询中文乱码_java(jsp)使用MySql数据库,中文乱码的完整解决方案

mysql是一个小型的开源的数据库,用来自学一些技术是十分方便的。但使用mysql存储数据,也会遇到一些非常恶心的问题,如:中文乱码问题、java驱动程序无法使用的问题(已经解决,详见:http://hi.baidu.com/lauo1988/blog/item/ff0da655bd3e2eceb745ae0b.html)。

对于中文乱码问题。网上搜索得到的解决方案比较多,主要还是设置mySql的配置文件。这些都比较麻烦,但是设置成功的话,的确能够一劳永逸。但我尝试了很多次网上的方法,都不能很好的解决这个问题。乱码依然存在。想想,要做网站的话,用mySql数据库存放数据,中文都不能很好支持的话,做这东西是没有用的!

最终,我按照:将中文字字符串,按照无损编码的方式,对其进行编码,然后直接存于数据库中。当要取出数据时,再将中文字符串解码。这样可以达到存储中文字符串,又不会产生乱码的目标。

我采用了里面的:“String-GBK〉ByteArray-ISO-8859-1〉String-ISO-8859-1〉ByteArray-GBK〉String ”的编码/解码方式。

主要的java处理函数如下:

/*

*完成从gbk编码到ISO-8859-1的转换

*/

public static String encode(String str)

{

if(str==null||str.equals("")) return str;

try

{

return new String(str.getBytes("gbk"),"ISO-8859-1");

}

catch(Exception e){ e.printStackTrace(); return str;}

}

/*

*从ISO-8859-1恢复gbk编码

*/

public static String decode(String str)

{

if(str==null||str.equals("")) return str;

try

{

return new String(str.getBytes("ISO-8859-1"),"gbk");

}

catch(Exception e){ e.printStackTrace(); return str;}

}

当然,对于sql操作,不管是插入还是查询,sql语句必需先经过encode函数编码,然后得到的查询结果使用decode,可以恢复到需要的中文字串。举例如下:

/*

*获得用户的描述信息

*/

public String[] getUserInfo(String uid)

{

if(uid==null||uid.equals("")) return null;

try

{

uid = encode(uid);

//查询语句需要encode编码

ResultSet rev = stm.executeQuery(encode("select * from user where uid='"+uid+"'");

if(rev.next())

{

String[] str=new String[4];

str[0] = decode(rev.getString("uid"));//得到的结果需要decode解码

str[1] = decode(rev.getString("psw"));

str[2] = decode(rev.getString("role"));

str[3] = decode(rev.getString("etc"));

return str;

}

else return null;

}

catch(Exception e)

{

return null;

}

}

方法总结:

优点:无需对mySql的charset进行重新配置,只需要使用encode、decode对相应的sql语句进行编码及解码,即可实现中文字符串在mysql中的完整存储。

缺点:每一个sql语句,都需要再编码(encode);每一个包含中文字串的查询结果,都需要解码decode

jsp使用此方法进行查询及相应的操作时,应该注意网页得到的表单的数据编码为iso-8859-1,应该注意转换。使用以下方法:

user = bbsDbm.encode(user,"iso-8859-1","gb2312");//jsp网页属性为:charset=gb2312

此encode函数为:(bbsDbm:我的bbs系统数据库管理类,用以实现数据库操作,---javaBean)

public static String encode(String str,String charset1,String charset2)

{

if(str==null||str.equals("")) return str;

try

{

return new String(str.getBytes(charset1),charset2);

}

catch(Exception e){ e.printStackTrace(); return str;}

}

简单而言:注意编码、解码的无损性,保证数据库存储的是完整中文数据,从数据库提取信息,也要无损解码。对于jsp,只要正确知道,当前页面所使用的charset,以及网页表单提交的数据的默认编码,即可对其进行再解码。

至此,完整的jsp、java使用mySql数据库,产生中文乱码的完整解决方案已经呈现在你的面前。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值