`
woshixushigang
  • 浏览: 576275 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类

数据库、java编码

 
阅读更多

影响Java中字体编码正确显示的有几个因素: 1)数据库的连接方式; 2)网页中使用的字体编码; 3)数据库里存放数据的字体编码; 4)Java的缺省字体编码。如果在编程中遇到不能正确显示中文时,要先弄清楚以上几项所使用的字体编码,再分析找出原因,即可解决问题。

众所周知,JSP是Java的一种,和网页有关,而网页也有自己的中文编码系统,所以JSP处理中文要比纯Java的类文件更为麻烦。本文的测试数据库是MySQL3.2,数据库连接驱动是用org.gjt.mm.mysql.Driver,这里主要讨论UTF-8和GBK的显示( GB2312是GBK的一个子集,Java中可以使用GBK来代替GB系列)。我们先来研究JSP中字体编码问题, 下面第一到第六点是针对JSP的(因为从数据库里读出中文数据与写入中文数据有所区别,咱们分别说明,前三点是从读取数据库到显示在网页,后三点是从网页输入数据到存入数据库),第七到第九点针对纯Java的类文件。 以下rs表示ResultSet的一个实例,是执行Select语句之后产生的数据集。

一、数据库连接方式使用UTF-8

在连接数据库的驱动后面加上这句参数useUnicode=true&characterEncoding=

UTF-8,例如jdbc:mysql://localhost/DBVF?autoReconnect=true&useUnicode=

true&characterEncoding=UTF-8,从数据库里读出中文显示在使用GBK的JSP的网页里,如果数据库里存放的字体编码是UTF-8,在JSP中使用 str=new String(rs.getBytes(1),"UTF-8")或者str=rs.getString(1),可以正确显示中文。如果数据库里存放的是GBK数据,那么JSP中也要使用str=new String(rs.getBytes(1),"GBK")来显示正确的中文。值得注意的是如果页面使用UTF-8,数据库里存放的是UTF-8,也可以用str=new String(rs.getBytes(1),"GBK")正确显示中文。如果网页是UTF-8,而数据库里存放的是GBK,无法直接显示中文,需要2步转换, str=new String(rs.getBytes(1),"GBK"); 再str=new String(str.getBytes("UTF-8"),"GBK"),才可以正确显示中文。

二、数据库连接方式使用GBK

在连接数据库的驱动后面加上这句参数useUnicode=true&characterEncoding=

GBK,例如jdbc:mysql://localhost/DBVF?autoReconnect=true&UseUnicode=true&

characterEncoding=GBK,从数据库里读出中文,显示在使用GBK的JSP的网页里,如果数据库里存放的字体编码是UTF-8,在JSP中一定要使用 str=new String(rs.getBytes(1),"UTF-8"),才正确显示中文。如果数据库里存放的是GBK数据,那么JSP中也要使用str=new String(rs.getBytes(1),"GBK") 或者直接使用str=rs.getString(1),即可显示正确的中文。 如果网页是UTF-8,而数据库里存放的是GBK,只能用str=new String(rs.getString(1).getBytes("UTF-8"),"GBK")的方法来显示中文; 如果网页是UTF-8,而数据库里存放的是UTF-8,可用str=new String(rs.getBytes(1),"GBK") 或者rs.getString(1)方法来显示中文。

三、使用缺省数据库连接方式

连接数据库的驱动后面没有这句参数useUnicode=&characterEncoding=,例如jdbc:mysql://localhost/DBVF?autoReconnect=true,没有参数useUnicode=true&characterEncoding,表示使用默认的ISO-8895-1编码。

1. 从数据库里读出中文,显示在GBK的网页里。如果数据库里存放的字体编码是UTF-8,在JSP网页中一定要使用语句 str=new String(rs.getBytes(1),"UTF-8") 或者str= new String(rs.getString(1).getBytes("ISO-8859-1"),"UTF-8"),才可正确显示中文。如果数据库里存放的是GBK数据,那么JSP中也要使用str=new String(rs.getBytes(1),"GBK")或str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK") 显示正确的中文。

2. 如果网页是UTF-8,不能直接正确显示GBK,需要2步转换,str=new String(rs.getBytes(1),"GBK"),再str=new String(str.getBytes("UTF-8"),"GBK") 才可以正确显示中文。如果数据库里存的是UTF-8,直接用str=new String(rs.getBytes(1),"GBK")或者str=new String(rs.getString(1).getBytes("ISO-8859-1"),"GBK")就可以显示中文了。

以上是读取数据库里中文正确显示在网页上,下面三点是如何正确存入数据库。

四、数据库连接方式使用UTF-8编码

JSP中要把网页输入的中文存入数据库,通常有一个提交(Submit)的过程,是用str=request.getParameter("username"),然后执行update或者insert语句来存入数据库。如何赋值给str很重要,而且这里中文输入与网页所使用的字体编码有关。

1、 网页使用UTF-8,使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8")或者str= new String(request.getParameter("username").getBytes(),"UTF-8"),都可以使得存到数据库里的数据是UTF-8编码。

2. 网页使用GBK,使用str= new String(request.getParameter("username").getBytes(),"GBK"),那么存入数据库的是UTF-8编码。

3. 值得注意的是使用UTF-8的数据库连接方式不能存得GBK。

五、数据库连接方式使用GBK编码

1. 输入使用GBK网页,存到数据库里是GBK的方法: str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK") 或者str= new String(request.getParameter("username").getBytes(),"GBK")。

2. 网页使用GBK,想存入UTF-8到数据库里,要分2步: 先str=new String(request.getParameter("username").getBytes(),"GBK"),再str=new String(str.getBytes("UTF-8"),"GBK")即可。

3. 网页使用UTF-8,而且使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"GBK") 或者str= new String(request.getParameter("username").getBytes(),"UTF-8"),那么存到数据库里的数据是UTF-8编码。

4. 网页使用UTF-8,而且使用str= new String(request.getParameter("username").getBytes("ISO-8859-1"),"UTF-8"),那么存到数据库里的数据是GBK编码。

六、数据库连接方式使用缺省,即不使用参数useUnicode和characterEncoding

1. 网页使用GBK,如果使用str= request.getParameter("username")或者str= new String(request.getParameter("username").getBytes()),那么在数据库里的数据是GBK码。网页使用UTF-8 和使用str= request.getParameter("username"),则存入数据库是UTF-8编码。

2. 如果使用str= new String(request.getParameter("username").getBytes("ISO-8859-1")),那么根据网页提供的字体编码而存到数据库里,比如是UTF-8的网页,那么存到数据库中就是UTF-8编码,如果使用GBK网页,那么存到数据库里的字就是GBK编码。

3. 如果使用str= new String(request.getParameter("username").getBytes("UTF-8"),"UTF-8")这一种组合能存到正确的数据外,其他存到数据库里的数据则都是乱码或者错误码。在这个UTF-8组合的特例中,网页使用的是GBK,则存放到数据库里就是GBK,网页使用UTF-8,那么存到数据库里的就是UTF-8。

4. 网页是GBK的要存得UTF-8,一定需要2步: company=new String(request.getParameter("company").getBytes(),"GBK")和company=new String(company.getBytes("UTF-8"))。

5. 网页是UTF-8的,不能存得GBK在数据库里,一句话,改变数据库连接方式不能存得GBK码。

以上所有的都是基于JSP网页和数据库交换数据,下面讨论一下纯JAVA编程下的字体编码转换。

七、数据库连接方式使用UTF-8编码

1. 数据库里的中文是UTF-8,可以转换为GBK,但不能把GBK存入数据库。

2. 数据库是GBK,如果转换为UTF-8,使用content=new String(rs.getBytes(2),"GBK")直接将content存入数据库就可为UTF-8。

八、数据库连接方式使用GBK编码

1. 数据库里的中文是UTF-8,如果转换为GBK,使用content= new String(rs.getString(2).getBytes(),"UTF-8"),再直接使用update或者insert语句插入到数据库,即存得GBK。如果使用content= new String(rs.getString(2).getBytes(),"GBK")或者content= new String(rs.getString(2).getBytes()),再存入数据库即存得还是UTF-8编码。

2. 数据库里的中文是GBK,如果转换为UTF-8,使用content= new String(rs.getString(2).getBytes("UTF-8"))或者content= new String(rs.getString(2).getBytes("UTF-8"),"GBK"),再直接使用update或者insert语句插入到数据库,即存得UTF-8。

3. 如果某个String是GBK,要转换为UTF-8,也是使用content= new String(GBKstr.getBytes("UTF-8"))或者content= new String(GBKstr.getBytes("UTF-8"),"GBK"); 如果某个String是UTF-8,要转换为GBK,应该使用new String(UTFstr.getBytes("GBK"),"UTF-8")。

九、数据库连接方式使用缺省,即不跟参数

1. str2=new String(GBKstr.getBytes("UTF-8"),"ISO-8859-1"),可以将数据库里的GBK编码转换为UTF-8。

2. 读取UTF-8然后存入UTF-8,则用str1=new String(UTFstr.getBytes(),"ISO-8859-1")或者str1=new String(UTFstr.getBytes("GBK"),"ISO-8859-1")。

3. 不能实现数据库里的UTF-8转换为GBK。

如果采用UTF-8的数据库连接方式或者缺省数据连接方式,那么无法将UTF-8转为GBK;而GBK的数据库连接方式可以实现UTF-8和GBK的相互转换。建议大家采用GBK的数据连接方式。

 

分享到:
评论

相关推荐

    医务管理系统 access数据库 java编码 程序简单 易于理解

    医务管理系统,采用access数据库 实现增删改查功能,想当于日记文档,技术采用简单,java实现,欢迎大家给出宝贵意见,本系统主要针对给人练习使用,也可以给诊所进行应用。 医务管理系统,采用access数据库 实现增...

    java和数据库编码规范

    ### Java和数据库编码规范详解 #### 一、引言 编码规范是软件开发中的基石,它不仅提升代码的可读性和可维护性,还能促进团队协作,降低维护成本。本文将详细解读《QXPT2.0开发编码规范总述》,涵盖系统架构、代码...

    java连接cache数据库说明,数据库驱动,cache可视化工具

    Java连接Cache数据库主要涉及到的是如何使用Java编程语言与Intersystems Cache数据库进行交互。Intersystems Cache是一款高性能、面向对象的数据库系统,广泛应用于医疗、金融等领域的复杂数据管理。在Java环境中,...

    连接数据库JAVA类文件

    标题提到的"连接数据库JAVA类文件"指的是使用Java语言编写的类,用于管理与数据库的连接。这些类通常包含方法来建立、管理和关闭数据库连接,执行SQL查询,以及处理结果集。描述中的"一个资源文件,一个数据源...

    数据库课程设计-JAVA实现学生信息管理系统

    这个学生信息管理系统项目为初学者提供了实践数据库设计、Java编程和GUI开发的机会,同时也涵盖了软件开发的基本流程,包括需求分析、设计、编码、测试和部署。通过完成这样的项目,学习者可以提升自己的编程技能和...

    java 连接数据库实现用户登录功能

    7. **安全注意事项**:在实际应用中,避免在代码中硬编码数据库凭证,而是使用环境变量或配置文件。另外,存储用户密码时,应该进行哈希加密,而不是明文存储。 8. **性能优化**:对于大量并发请求,可以考虑使用...

    java db 省市区编码表

    在开发Java桌面程序时,这个编码表可以被用作后台数据库的一部分,通过连接Java DB(如Derby)来实现对地址信息的存储和检索。程序可以利用这些数据来支持用户输入地址时的自动补全功能,或者在处理涉及地理位置的...

    数据库编码解决方案

    数据库编码解决方案旨在解决Java开发中使用JDBC访问数据库时遇到的字符编码问题,尤其是在存储和检索字符串时需要手动进行编码转换的繁琐过程。在传统的Java应用程序中,数据库操作通常分为两个层次:数据库连接池和...

    Access mdb 转 sqlite 数据库java代码

    总之,完成“Access mdb 转 sqlite 数据库java代码”的任务需要深入理解Java JDBC、数据库原理、字符编码以及文件操作。通过这样的转换,你可以将Access数据库无缝迁移到SQLite,同时保证中文数据的正确显示,这对于...

    阿里巴巴Java编码规范.pdf

    编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范编码规范

    Java+EE学生成绩管理系统+Sql数据库Java源码.

    Java+EE学生成绩管理系统是基于Java编程语言...总的来说,这个Java+EE学生成绩管理系统展示了完整的软件开发生命周期,涵盖了从需求分析、设计、编码、测试到部署的各个环节,是学习和实践Java Web开发的一个典型实例。

    jsp连接数据库大全(java)

    5. **安全性**:不要在JSP页面中硬编码数据库凭证,这可能导致安全风险。最好通过环境变量或者配置文件来管理这些信息。 6. **预编译语句**:使用`PreparedStatement`可以防止SQL注入攻击,并且通常比`Statement`...

    数据库编程之编码转换实例--乱码分析

    例如,Java应用中的默认编码可能需要通过`-Dfile.encoding=UTF-8`命令行参数来设定。 解决乱码问题的一般步骤包括: 1. 确定数据源的编码:了解数据最初是以何种编码存储的,这通常可以通过文件的元数据或数据库的...

    oracle 根据数据库自动生成JAVA代码

    "Oracle根据数据库自动生成JAVA代码"这一技术就是将数据库中的表结构映射到Java编程语言中的实体类、DAO(Data Access Object)、Service、Controller以及前端展示层的HTML模板,从而减少手动编写这些基础代码的工作...

    LINUX平台JAVA直接连接access数据库dbf文件

    在IT行业中,数据库的使用是不可或缺的一部分,尤其是在Java开发中。本主题聚焦于在LINUX平台上使用Java直接连接到Access数据库中的DBF文件。DBF文件是FoxPro、dBase等数据库系统常用的表格文件格式,虽然它不是...

    数据库SQLserver java课程 设计-SQL Server代码类资源

    在本课程设计中,我们将深入探讨如何利用SQL Server数据库系统和Java编程语言来构建一个学生信息管理系统。这个项目旨在帮助学生掌握SQL Server的基本操作以及Java与数据库交互的技能,为今后的实际开发工作打下坚实...

    java连接oracle数据库

    ### 使用Java连接Oracle数据库 #### 一、简介与准备工作 在进行Java程序开发时,经常需要与数据库进行交互。Oracle数据库作为业界广泛使用的数据库之一,掌握如何使用Java连接Oracle数据库是一项重要的技能。本文...

    java 程序打包成jar文件后 连接数据库出错(教程方法)

    然而,在打包包含数据库连接的Java应用程序时,可能会遇到一些问题,尤其是涉及到像MySQL这样的外部数据库。本教程将详细介绍如何在Eclipse中正确打包Java程序,并确保它能在运行时成功连接到MySQL数据库。 首先,...

Global site tag (gtag.js) - Google Analytics