Unknown initial character set index '255' received from server. Initial client character set can be

初学hibernate时,配置核心配置文件时出错,现将错误记下,并附上解决方法

 

1:org.hibernate.internal.util.config.ConfigurationException: Could not locate cfg.xml resource [hibernate.cfg.xml]

找不到hibernate.cfg.xml配置文件,下面是原来出错的代码

    @Test
    //保存客户信息
    public void demo1(){
        // 1.加载Hibernate的核心配置文件
        Configuration configuration = new Configuration().configure();
        // 手动加载映射
        //configuration.addResource("com/learnning/hibernate/demo1/Customer.hbm.xml");
        // 2.创建一个SessionFactory对象:类似于JDBC中连接池
        SessionFactory sessionFactory = configuration.buildSessionFactory();
        // 3.通过SessionFactory获取到Session对象:类似于JDBC中Connection
        Session session = sessionFactory.openSession();
        // 4.手动开启事务:
        Transaction transaction = session.beginTransaction();
        // 5.编写代码

        Customer customer = new Customer();
        customer.setCust_name("张三");

        session.save(customer);

        // 6.事务提交
        transaction.commit();
        // 7.资源释放
        session.close();
        sessionFactory.close();
    }

修改为:

// 1.加载Hibernate的核心配置文件
Configuration configuration = new Configuration().configure("com/learnning/hibernate/demo1/hibernate.cfg.xml");

参考链接:https://blog.csdn.net/Shipley_Leo/article/details/77887612 

2:Unknown initial character set index '255' received from server. Initial client character set can be forced via the 'characterEncoding' property.

数据库连接编码错误:原来错误的配置文件内容

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE hibernate-configuration PUBLIC "-//Hibernate/Hibernate Configuration DTD 3.0//EN"
        "http://www.hibernate.org/dtd/hibernate-configuration-3.0.dtd">
<hibernate-configuration>
    <session-factory>
        <!-- 连接数据库的基本参数 -->
        <property name="hibernate.connection.driver_class">com.mysql.jdbc.Driver</property>
        <property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernat_learning</property>

        <property name="hibernate.connection.username">root</property>
        <property name="hibernate.connection.password">123456</property>

        <!-- 配置Hibernate的方言 -->
        <property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>

        <!-- ================== 可选配置 ===================== -->
        <!-- hibernate 打印SQL语句 -->
        <property name="hibernate.show_sql">true</property>

        <!-- hibernate 格式化SQL语句 -->
        <property name="hibernate.format_sql">true</property>

        <!-- 引入映射文件 -->
        <mapping resource="com/learnning/hibernate/demo1/Customer.hbm.xml"/>

    </session-factory>
</hibernate-configuration>

将数据库连接配置修改为(仍然报错):

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernat_learning?useUnicode=true&characterEncoding=utf8

错误信息如下:

Caused by: javax.xml.bind.UnmarshalException
 - with linked exception:
[javax.xml.stream.XMLStreamException: ParseError at [row,col]:[8,130]
Message: 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾。]
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.handleStreamException(UnmarshallerImpl.java:470)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:448)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:420)
    at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor.unmarshal(JaxbCfgProcessor.java:126)
    ... 27 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[8,130]
Message: 对实体 "characterEncoding" 的引用必须以 ';' 分隔符结尾。
    at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:604)
    at com.sun.xml.internal.stream.XMLEventReaderImpl.peek(XMLEventReaderImpl.java:276)
    at javax.xml.stream.util.EventReaderDelegate.peek(EventReaderDelegate.java:104)
    at org.hibernate.boot.cfgxml.internal.JaxbCfgProcessor$NamespaceAddingEventReader.peek(JaxbCfgProcessor.java:254)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXEventConnector.handleCharacters(StAXEventConnector.java:164)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.StAXEventConnector.bridge(StAXEventConnector.java:126)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:445)
    ... 29 more

参考链接:

https://blog.csdn.net/amesvan/article/details/80938145

最终解决方法:是因为XML无法解析特殊字符(&)

方法1:使用CDATA部件,CDATA部件在CDATA内部的所有内容都会被解析器忽略。一个 CDATA 部件以"<![CDATA[" 标记开始,以"]]>"标记结束: 

<property name="hibernate.connection.url"><![CDATA[jdbc:mysql://localhost:3306/hibernat_learning?useUnicode=true&characterEncoding=utf8]]></property>

方法二:使用(&amp; & )代替(&)

<property name="hibernate.connection.url">jdbc:mysql://localhost:3306/hibernat_learning?useUnicode=true&amp;characterEncoding=utf8

参考链接:

https://www.cnblogs.com/catgatp/p/6403326.html

https://blog.csdn.net/jackyrongvip/article/details/9215101

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值