仓酷云

标题: JAVA网页编程之java 与 mysql 中文成绩的处置 [打印本页]

作者: 柔情似水    时间: 2015-1-18 11:41
标题: JAVA网页编程之java 与 mysql 中文成绩的处置
先说优点,首先和C,C++这些语言比起来,java很简单,去掉指针的java,非常好理解,自动垃圾回收机制也很好,自从JDK1.5推出以后,性能上又有了很大提高。mysql|成绩|中文成绩:用jdbc拔出、读取数据库种笔墨串乱码。


起首,mysql数据库中的工具都是二进制寄存的,撑持任何数据,固然包含中文。你到命令行下
insertintotesttablevalues(中文);
select*fromtesttable;
全都显现一般。
可是,固然存取中文没成绩,但排序、婚配的时分有成绩。以是假如你的数据库里有中文的话,记得在设置文件中,如c:winntmy.ini中的[mysqld]里增加一行:
default-character-set=gbk
然后重启mysqlserver。注重gbk要小写,否则mysqld启动不了。


其次,数据库没成绩,上面看看java程序。在程序里很无聊地加一句调试语句:
out.println("中文");
也显现一般,申明全部java情况没成绩。


以是,固然是接洽java和mysql的部分,mysqljdbcdriver出成绩了。
剖析一下,java外部利用unicode,而mysql缺省利用iso-8xxx(忘了),以是jdbcdriver把查询字符串传给mysqlserver时,会做unicode->iso-8xxx的转换,从mysqlserver承受了局时,会做iso-8xxx->unicode的转换。(在屏幕上显现了局时会unicode->GBK,不外不关这里的事。)
这就有成绩了,我在命令行下拔出数据库的中笔墨符串是GBK(这是简体中文windows的默许),以是jdbcdriver承受查询了局时,应当做GBK->unicode的转换才对。
考证一下,对从数据库中读出的中笔墨串s,
newString(s.getByte("iso-8xxx"),"gbk")
将s先做一个unicode->iso-8xxx转换成它寄存在数据库中的原始容貌。我们晓得它是gbk,以是手工来gbk->unicode,如许java程序就显式一般了。
相似,写进数据库的时分,我们等候jdbcdriver会把unicode->gbk,了局倒是unicode->iso-8xxx,固然是乱码了。


有良多文章,就到此为止,并告知我们:要办理中文成绩,本人手工转码吧。
这其实是不卖力任。假如每个字符串都要手工转码,申明程序计划出了成绩。
想想,写mysqljdbcdriver的家伙会连转码都不晓得?
以是我看看connector-j-3.0.7内里的readme,找到一个办理计划:
connection=DriverManager.getConnection("jdbc:mysql://localhost/test?user=root&password=&useUnicode=true&characterEncoding=GBK");
这是告知jdbcdriver强迫按指定参数转码


实在仍是有成绩。假如mysqlserver必定得用iso-8xxx,那就只要用上一个举措了。但我记得我的mysql是gbk,不是都悔改my.ini了吗?jdbcdriver怎样都不主动探测mysqlserver的字符集呢?
这个时分就看到开放源码的优点了:-)connector-j-3.0.7源码中的确有代码读取mysqlserver的信息,包含字符集。从正文中晓得,
作者为unicode转换到单字节字符集写了本人的转换函数,并号称比jvm的快百分之几几。以是代码中有一段,判段数据库假如利用的是单字节就挪用本人的转换函数。但这段代码前面就忘了把多字节字符集交给jvm往转换了,以是酿成了缺省的iso-8xxx转换。
我的修正体例:commysqljdbcConnecter.java这个文件的1969行,
this.doUnicode=true;//forcetheissue
将之上移四行到1964行,放鄙人面这一行的后面:
try{
用这份代码从头编出来的jdbcdriver,你的java会见数据库的程序不必做任何修正就能够准确读写中文了,不外要记得mysqlserver要default-character-set=gbk
我利用它测试了几个小程序,中文都显现一般,并且都没逝世机、非常。呵呵,自我感到很好。

对于一个大型项目,如果用java来作,可能需要9个月,并且可能需要翻阅10本以上的书,但如果用ruby来作,3个月,3本书就足够了,而.net也不过3,4本书足以,这就是区别。
作者: 海妖    时间: 2015-1-19 05:24
所以现在应用最广泛又最好学的就是J2EE了。 J2EE又包括许多组件,如Jsp,Servlet,JavaBean,EJB,JDBC,JavaMail等。要学习起来可不是一两天的事。那么又该如何学习J2EE呢?当然Java语法得先看一看的,I/O包,Util包,Lang包你都熟悉了吗?然后再从JSP学起。
作者: 愤怒的大鸟    时间: 2015-1-24 06:29
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
作者: 简单生活    时间: 2015-1-25 07:50
至于JDBC,就不用我多说了,你如果用java编过存取数据库的程序,就应该很熟悉。还有,如果你要用Java编发送电子邮件的程序,你就得看看Javamail 了。
作者: 第二个灵魂    时间: 2015-1-26 21:15
学Java必读的两个开源程序就是Jive和Pet Store.。 Jive是国外一个非常著名的BBS程序,完全开放源码。论坛的设计采用了很多先进的技术,如Cache、用户认证、Filter、XML等,而且论坛完全屏蔽了对数据库的访问,可以很轻易的在不同数据库中移植。论坛还有方便的安装和管理程序,这是我们平时编程时容易忽略的一部份(中国程序员一般只注重编程的技术含量,却完全不考虑用户的感受,这就是我们与国外软件的差距所在)。
作者: 老尸    时间: 2015-1-31 19:50
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
作者: 飘灵儿    时间: 2015-2-6 21:49
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
作者: 透明    时间: 2015-2-7 14:32
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
作者: 分手快乐    时间: 2015-2-9 16:41
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
作者: 乐观    时间: 2015-2-12 23:46
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者: 活着的死人    时间: 2015-2-21 11:40
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
作者: 小魔女    时间: 2015-3-6 20:12
J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。
作者: 谁可相欹    时间: 2015-3-11 17:26
我大二,Java也只学了一年,觉得还是看thinking in java好,有能力的话看英文原版(中文版翻的不怎么好),还能提高英文文档阅读能力。
作者: 金色的骷髅    时间: 2015-3-17 11:07
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 变相怪杰    时间: 2015-3-18 02:53
任职于太阳微系统的詹姆斯·高斯林等人于1990年代初开发Java语言的雏形,最初被命名为Oak,目标设置在家用电器等小型系统的程序语言
作者: 冷月葬花魂    时间: 2015-3-22 23:34
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
作者: 灵魂腐蚀    时间: 2015-4-1 17:10
还好,SUN提供了Javabean可以把你的JSP中的 Java代码封装起来,便于调用也便于重用。
作者: 小妖女    时间: 2015-4-13 00:58
你就该学一学Servlet了。Servlet就是服务器端小程序,他负责生成发送给客户端的HTML文件。JSP在执行时,也是先转换成Servlet再运行的。虽说JSP理论上可以完全取代Servlet,这也是SUN推出JSP的本意,可是Servlet用来控制流程跳转还是挺方便的,也令程序更清晰。接下来你应该学习一下Javabean了,可能你早就看不管JSP在HTML中嵌Java代码的混乱方式了,这种方式跟ASP又有什么区别呢?
作者: 再现理想    时间: 2015-4-16 01:10
Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。
作者: 精灵巫婆    时间: 2015-4-21 20:10
是一种由美国SUN计算机公司(Sun Microsystems, Inc.)所研究而成的语言
作者: 仓酷云    时间: 2015-4-25 09:22
让你能够真正掌握接口或抽象类的应用,从而在原来的Java语言基础上跃进一步,更重要的是,设计模式反复向你强调一个宗旨:要让你的程序尽可能的可重用。




欢迎光临 仓酷云 (http://ckuyun.com/) Powered by Discuz! X3.2