使用JDBC中的出现的乱码和查询无结果问题

使用JDBC中的问题

  1. 连接的后出现查询结果是乱码。

1.可能是代码的编码与数据库的编码不同

? 有可以将二者都设置为UTF-8

2.如果比较懒得话可以只设代码为UTF-8

mysql 连接url中useUnicode=true&characterEncoding=UTF-8 的作用

添加的作用是:指定字符的编码、解码格式。

? 例如:mysql数据库用的是gbk编码,而项目数据库用的是utf-8编码。这时候如果添加了useUnicode=true&characterEncoding=UTF-8 ,那么作用有如下两个方面:

1. 存数据时:

? 数据库在存放项目数据的时候会先用UTF-8格式将数据解码成字节码,然后再将解码后的字节码重新使用GBK编码存放到数据库中。

2.取数据时:

? 在从数据库中取数据的时候,数据库会先将数据库中的数据按GBK格式解码成字节码,然后再将解码后的字节码重新按UTF-8格式编码数据,最后再将数据返回给客户端。

注意:在xml配置文件中配置数据库utl时,要使用&的转义字符也就是&

? 例如:

jdbc:mysql://[host][,failoverhost...][:port]/[database] ?[?propertyName1][=propertyValue1][&propertyName2][=propertyValue2]...

实例:

jdbc:mysql://localhost:3306/sakila?profileSQL=true

现只列举几个重要的参数,如下表所示:

参数名称                    参数说明                                                                                                                         缺省值     最低版本要求
user                      数据库用户名(用于连接数据库)                                                                                                                  所有版本
password                   用户密码(用于连接数据库)                                                                                                                     所有版本
useUnicode              是否使用Unicode字符集,如果参数characterEncoding设置为gb2312或gbk,本参数值必须设置为true                                                   false     1.1g
characterEncoding       当useUnicode设置为true时,指定字符编码。比如可设置为gb2312或gbk                                                                           false     1.1g
autoReconnect                当数据库连接异常中断时,是否自动重新连接?                                                                                           false     1.1
autoReconnectForPools     是否使用针对数据库连接池的重连策略                                                                                                     false     3.1.3
failOverReadOnly         自动重连成功后,连接是否设置为只读?                                                                                                    true     3.0.12
maxReconnects           autoReconnect设置为true时,重试连接的次数                                                                                                 3     1.1
initialTimeout        autoReconnect设置为true时,两次重连之间的时间间隔,单位:秒                                                                                    2     1.1
connectTimeout       和数据库服务器建立socket连接时的超时,单位:毫秒。 0表示永不超时,适用于JDK 1.4及更高版本                                                            0     3.0.1
socketTimeout          socket操作(读写)超时,单位:毫秒。 0表示永不超时                                                                                            0     3.0.1

对应中文环境,通常mysql连接URL可以设置为:

jdbc:mysql://localhost:3306/test?user=root&password=&useUnicode=true&characterEncoding=gbk&autoReconnect=true&failOverReadOnly=false

在使用数据库连接池的情况下,最好设置如下两个参数:

autoReconnect=true&failOverReadOnly=false

mysql sql语句别名不生效问题: useOldAliasMetadataBehavior

为增强可读性指定别名

有相同名字的时候用别名区分

需要被联查多次的时候用别名区分

实例:

jdbc:mysql://localhost/openemm?useUnicode=yes&characterEncoding=UTF-8&useOldAliasMetadataBehavior=true
其中:dbc: mysql://localhost/openemm?这个代表数据库链接地址,
useUnicode=yes&characterEncoding=UTF-8这个代表允许用户自己设定数据库编码,而且设置成UTF-8
  useOldAliasMetadataBehavior=true这个代表数据库里面允许有别名

连接后再数据库中查询不到数据

明明数据库内有符合条件的数据,但是就是无法查询到?可能是犯了以一个低级的错误。

数据库内尽量不要使用nchar()这种格式,因为固定了位数,当数据的位数不够的时候就会使用空字符来占位。如:

name nchar(10) -->施维新

使用String输出时,会看到施维新□□□□□□□

同时nchar()格式会比较浪费空间,如无必要,不建议使用。

原文地址:https://www.cnblogs.com/sinjin/p/8726857.html

时间: 2024-10-15 12:44:34

使用JDBC中的出现的乱码和查询无结果问题的相关文章

在JDBC中实现SQL语句的模糊查询

在JDBC中实现SQL语句的模糊查询 在大多数情况下我们可以在JDBC中写入sql语句通过占位符的方式来直接查询,但是如果要进行模糊查询,需要转义字符才能够正常查询. sql语句: select * from table where tableid like %id%; JDBC中的sql语句: String sql = "select * from table where tableid like \"%\"?\"%\"";//?为占位符 原文

JDBC中,如何动态的设置查询条件

今天看JDBC,发现有段代码,可以减少重复的编写查询方法,如下: 1 public List<Goddess> query(List<Map<String, Object>> params) throws Exception{ 2 List<Goddess> result=new ArrayList<Goddess>(); 3 4 Connection conn=DBUtil.getConnection(); 5 StringBuilder sb

SpringMVC + mybatis + Druid insert 数据库中文乱码,查询无乱码

之前一直在pom文件配置的数据库连接url,很多配置都写在pom文件中导致配置文件太长 新项目将配置写到不同的文件夹中得properties文件中了 db.url直接复制的pom文件中的 p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Monaco } span.s1 { color: #3933ff } jdbc:mysql://127.0.0.1:3306/portal?useUnicode=true&characterEncodin

PHP中的中文截取乱码问题_gb2312_utf-8

一.字符串编码为gb2312,一个中文占俩字节 ? public static function chinesesubstr($str, $start, $len) { // $str指字符串,$start指字符串的起始位置,$len指字符串长度         $strlen = $start + $len; // 用$strlen存储字符串的总长度,即从字符串的起始位置到字符串的总长度         for($i = $start; $i < $strlen;) {            

java web中请求和响应中包含中文出现乱码解析

说明:在计算机中保存的一切文本信息是以一定的编码表(0,1,0,1)来保存我们所认识的字符(汉字或英文字符),由字符到计算机存储的二进制过程是编码,由读取二进制到文本的过程称为解码.而字符编码有多种不同的编码表,所以,如果编码格式和解码格式不是同一个码表就会出现乱码.想要避免出现乱码,需要使保存和读取时使用相同的码表. 在java web编程中经常会出现乱码,现在详细讲解一下如何进行设置,避免乱码 1 网页编码 在编写网页的时候,需要指定网页的编码格式,使用<meta http-equiv=&quo

asp.net url址址中中文汉字参数传递乱码解决方法

中文乱码是网站开发中会常碰到的问题,今天我们来讲一下关于url址址中中文汉字参数传递乱码解决方法,有需要的朋友可以参考下.在cs文件里传参的时候用UrlEncode: Response.Redirect("B.asp教程x?Name="+Server.UrlEncode(Name)); 接参的时候用UrlDecode: Response.Write(Server.UrlDecode(Request.QueryString["Name"])); 脚本儿里传参的时候用e

js的url中传递中文参数乱码,如何获取url中参数问题

一:Js的Url中传递中文参数乱码问题,重点:encodeURI编码,decodeURI解码: 1.传参页面Javascript代码: <script type=”text/javascript”> function send(){ var url = "test01.html"; var userName = $("#userName").html(); window.open(encodeURI(url + "?userName="

linux中的sqlplus显示乱码和方向键解决办法

linux中的sqlplus显示乱码解决办法 1.临时解决: export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK" 2.永久生效 echo 'export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"'>>/etc/profile linux中的sqlplus退格和方向键的显示问题解决办法 stty erase ^H echo 'stty erase ^H'&g

在JDBC中使用带参数的SQL语句

ADO.Net中,支持带参数的SQL语句,例如:Select * from Tables where [email protected],其中@column1为SQL参数,使用起来非常方便,而JDBC中没有找到此功能,感觉有点不便, 于是想自己实现一个.今天正好看见csdn中有一篇http://blog.csdn.net/wallimn/article/details/3734242 文章,有些感触,于是把自己的实现也写出来. 我的思路: 1: 在SQL语句中找到以@开始,以" ",