“Unknown initial character set index '255' received from serve”错误解决过程 - Mybatis 示例

今天在学习Mybaits的时候,根据教程写出了一个第一个程序——从数据库读取一条数据并打印。当一切都就绪了:
user.java

UserMapper.xml

mybatis-config.xml

测试类

依葫芦画瓢地写下来,以为没问题了,运行这个测试方法,竟然报错了:


org.apache.ibatis.exceptions.PersistenceException: 
### Error querying database.  Cause: java.sql.SQLException: Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.
### The error may exist in UserMapper.xml
### The error may involve com.zyr.mybatis.selectUser
### The error occurred while executing a query
### Cause: java.sql.SQLException: Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:150)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectList(DefaultSqlSession.java:141)
	at org.apache.ibatis.session.defaults.DefaultSqlSession.selectOne(DefaultSqlSession.java:77)
	at com.zyr.mybatis.MybaitsTest.test1(MybaitsTest.java:21)
	...

看到信息中有“255”和“characterEncoding"就知道是编码问题了,我数据库设置的是UTF-8的编码,在网上查阅资料后,发现jdbc的url应该加上一些参数,于是把配置文件中改成了:(顺便把时区也加上了)

<property name="url" value="jdbc:mysql://localhost:3306/mybatis_demo?useUnicode=true&characterEncoding=utf8&serverTimezone=GMT%2B8"/>

再次运行!~~~ 再次报错!

org.apache.ibatis.exceptions.PersistenceException: 
### Error building SqlSession.
### Cause: org.apache.ibatis.builder.BuilderException: Error creating document instance.  Cause: org.xml.sax.SAXParseException; lineNumber: 10; columnNumber: 119; 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾。
	at org.apache.ibatis.exceptions.ExceptionFactory.wrapException(ExceptionFactory.java:30)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:80)
	at org.apache.ibatis.session.SqlSessionFactoryBuilder.build(SqlSessionFactoryBuilder.java:64)
	at com.zyr.mybatis.MybaitsTest.test1(MybaitsTest.java:17)
	at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	...

对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾。这句话点醒我了,原来他是把属性的分隔符&当作实体的开头了,如&nbsp;。那也就是说xml文件里面不能有&号出现。(才发现自己如此愚蠢~,用&amp;代替所有的&就好了,其实问题到这里就已经解决了,但脑子短路的我当时没有往转义代替的方向去想,于是有了后面的问题)我想只能引入外部属性文件了:
jdbc.properties
在这里插入图片描述
想到之前学spring的时候,引入外部属性文件是以下代码:

<context:property-placeholder location="classpath:jdbc.properties"/>

粘到配置文件里后,发现总是有小红叉,运行也会报错:
在这里插入图片描述
最后又去看Mybaits的官方文档时才发现,它的引入方式是这样的:

<properties resource="jdbc.properties"/>

更改以后成功运行。

我以前一直以为xml配置文档多多少少是有一些共性的,就像html,只是没有那么严格,今天才发现,xml配置可以一点共性都没有,因为每种配置的规范都是在DTD文件里约束好的,元素、属性什么的都是自定义的。嗯,很自由,也很头疼。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值