愤怒的大鸟 发表于 2015-1-18 11:38:52

JAVA网站制作之Java数据库字符国际化

为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。数据|数据库数据库字符国际化是人人发问最多的成绩,比方MySQL数据库人人大概在JDBC-URL增加useUnicode=true&CharacterEncoding=GBK作为中文撑持的基础前提。但这偶然损坏了数据的完全性,假如某些人粗枝大叶,就会招致数据编码毛病,发生乱码。因而,我们必要一些手腕在程序外部举行编码处置。人们一样平常经由过程在使用上利用String(bytes:byte[],enc:String)/String.getBytes(enc:String)举行字符串编解码,如许做固然易懂,可是假如碰到年夜字段表格,手动编码时费时吃力。

我的办法:经由过程研讨JDK类库,能够感到到多层处置机制在数据处置上的优胜性。我们完整有大概在数据库上创建一其中间层用于字符的国际化处置,我就是这么做的。细心研讨一下JDBC操纵数据库呈现字符编码成绩的本源,很简单发明多半情形是ResultSet的几个String办法在作祟,因而我们就完整能够编写一个ResultSet两头层举行国际化处置,源码以下:


publicclassI18nResultSetimplementsResultSet{privateStringencoding;privateResultSetrs;publicI18nResultSet(ResultSetrs,Stringencoding)throwsjava.io.UnsupportedEncodingException{//反省该编码称号是不是被体系撑持。"".getBytes(encoding);this.rs=rs;this.encoding=encoding;}……//以下几个办法是举行String字符串的重编码.publicStringgetString(intindex)throwsSQLException{Stringdata=null;try{data=newString(rs.getBytes(index),encoding);}catch(java.io.UnsupportedEncodingExceptionuee){}}publicStringgetString(Stirngfield)throwsSQLException{Stringdata=null;try{data=newString(rs.getBytes(field),encoding);}catch(java.io.UnsupportedEncodingExceptionuee){}}publicvoidupdateString(intindex,Stringvalue)throwsSQLException{try{rs.updateBytes(index,value.getBytes(encoding));}catch(java.io.UnsupportedEncodingExceptionuee){}}publicvoidupdateString(Stringfield,Stringvalue)throwsSQLException{try{rs.updateBytes(field,value.getBytes(encoding));}catch(java.io.UnsupportedEncodingExceptionuee){}}……}


能够看出,一切的String操纵都利用特定编码的字节数组举行存取,如许经由过程界说encoding的值完成数据库存取数据编码的分歧性,且encoding完整能够经由过程在设置信息中静态界说。

同时,下面的程序又能够办理一些固有的字符串处置成绩,比方把持符如
导进到数据库中很有大概被剖析为
使其不克不及换行,经由过程字节数组操纵,就能够办理这个成绩。如许像文章固有格局就能够完全地保存上去而不必要举行分外转换操纵。

结论,经由过程多层处置机制利用两头层对数据库数据举行层层处置可以使处置环节之间构成松耦合干系,从而能够举行无效的把持。

上面给一个利用静态代办署理举行字符把持的代码(原创):

packagecom.yipsilon.crocodile.database;importjava.sql.ResultSet;importjava.lang.reflect.InvocationHandler;importjava.lang.reflect.Method;importjava.io.UnsupportedEncodingException;/***作者yipsilon*如要转载,请关照作者*/publicclassI18nResultSetHandlerimplementsInvocationHandler{privateResultSetrs;privateStringencoding;publicI18nResultSetHandler(ResultSetrs,Stringencoding)throwsUnsupportedEncodingException{this.rs=rs;"".getBytes(encoding);this.encoding=encoding;}publicObjectinvoke(Objectproxy,Methodmethod,Object[]args)throwsThrowable{StringmethodName=method.getName();if(methodName.equals("getString")){Objectobj=args;if(objinstanceofInteger){returndecodeString(rs.getBytes(((Integer)obj).intValue()),encoding);}else{returndecodeString(rs.getBytes((String)obj),encoding);}}elseif(methodName.equals("updateString")){Objectobj=args;if(objinstanceofInteger){rs.updateBytes(((Integer)obj).intValue(),encodeString((String)args,encoding));}else{rs.updateBytes((String)obj,encodeString((String)args,encoding));}returnnull;}returnmethod.invoke(rs,args);}privateStringdecodeString(byte[]bytes,Stringenc){try{returnnewString(bytes,enc);}catch(UnsupportedEncodingExceptionuee){returnnewString(bytes);}}privatebyte[]encodeString(Stringstr,Stringenc){try{returnstr.getBytes(enc);}catch(UnsupportedEncodingExceptionuee){returnstr.getBytes();}}}


利用时挪用:

ResultSetrs=...;//原始的ResultSet了局集Stringencoding="GBK";//字符编码(ResultSet)Proxy.newProxyInstance(rs.getClass().getClassLoader(),rs.getClass().getInterfaces(),newI18nResultSetHandler(rs,encoding));


没有那个大公司会傻了吧唧用.net开发大型项目,开发了,那等于自己一半的生命线被微软握着呢。而.net不行,限制在window系统,又是捆绑,鄙视微软之!

莫相离 发表于 2015-1-19 23:24:18

其实说这种话的人就如当年小日本号称“三个月拿下中国”一样大言不惭。不是Tomjava泼你冷水,你现在只是学到了Java的骨架,却还没有学到Java的精髓。接下来你得研究设计模式了。

小妖女 发表于 2015-1-20 15:40:47

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

灵魂腐蚀 发表于 2015-1-29 12:24:19

Java语言支持Internet应用的开发,在基本的Java应用编程接口中有一个网络应用编程接口(java net),它提供了用于网络应用编程的类库,包括URL、URLConnection、Socket、ServerSocket等。Java的RMI(远程方法激活)机制也是开发分布式应用的重要手段。

深爱那片海 发表于 2015-2-6 00:43:06

Java 不同于一般的编译执行计算机语言和解释执行计算机语言。它首先将源代码编译成二进制字节码(bytecode),然后依赖各种不同平台上的虚拟机来解释执行字节码。从而实现了“一次编译、到处执行”的跨平台特性。

山那边是海 发表于 2015-2-14 17:18:58

在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。

再现理想 发表于 2015-3-4 08:50:24

如果要向java web方向发展也要吧看看《Java web从入门到精通》学完再到《Struts2.0入门到精通》这样你差不多就把代码给学完了。有兴趣可以看一些设计模块和框架的包等等。

活着的死人 发表于 2015-3-7 03:20:26

Sun公司看见Oak在互联网上应用的前景,于是改造了Oak,于1995年5月以Java的名称正式发布。Java伴随着互联网的迅猛发展而发展,逐渐成为重要的网络编程语言。

简单生活 发表于 2015-3-14 05:48:20

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

小魔女 发表于 2015-3-21 00:23:41

是一种使网页(Web Page)产生生动活泼画面的语言

精灵巫婆 发表于 2015-4-5 15:37:08

是一种将安全性(Security)列为第一优先考虑的语言

蒙在股里 发表于 2015-5-1 20:10:41

J2SE开发桌面应用软件比起 VC,VB,DEPHI这些传统开发语言来说,优势好象并不明显。J2ME对于初学者来说,好象又有点深奥,而且一般开发者很难有开发环境。

兰色精灵 发表于 2015-5-1 21:43:33

象、泛型编程的特性,广泛应用于企业级Web应用开发和移动应用开发。

不帅 发表于 2015-5-5 16:14:03

Java 编程语言的风格十分接近C、C++语言。

若相依 发表于 2015-6-12 06:57:16

你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。

再见西城 发表于 2015-6-25 04:13:23

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

admin 发表于 2015-7-11 00:29:42

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

飘灵儿 发表于 2015-7-11 20:25:42

Jive的资料在很多网站上都有,大家可以找来研究一下。相信你读完代码后,会有脱胎换骨的感觉。遗憾的是Jive从2.5以后就不再无条件的开放源代码,同时有licence限制。不过幸好还有中国一流的Java程序员关注它,外国人不开源了,中国人就不能开源吗?这里向大家推荐一个汉化的Jive版本—J道。Jive(J道版)是由中国Java界大名 鼎鼎的banq在Jive 2.1版本基础上改编而成, 全中文,增加了一些实用功能,如贴图,用户头像和用户资料查询等,而且有一个开发团队在不断升级。你可以访问banq的网站

金色的骷髅 发表于 2015-7-21 16:02:07

如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。

只想知道 发表于 2015-10-2 10:17:41

Java是一种计算机编程语言,拥有跨平台、面向对java
页: [1]
查看完整版本: JAVA网站制作之Java数据库字符国际化