gpt4 book ai didi

java - 来自 Hibernate 的 UTF-8

转载 作者:行者123 更新时间:2023-11-29 01:51:54 24 4
gpt4 key购买 nike

当我从 MySql 数据库的查询中检索信息时遇到问题,它是这样的:

Je bâtirai 

UTF-8 字符集和 Hibernate 或 MySql 有错误。

请问我该如何解决?

这是我的 Hibernate 设置:

<?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>
<!-- Database connection settings -->
<property name="hibernate.dialect">org.hibernate.dialect.MySQLDialect</property>
<property name="connection.driver_class">com.mysql.jdbc.Driver</property>
<property name="connection.url">jdbc:mysql://localhost:3306/church</property>
<property name="connection.username">root</property>
<property name="connection.password">root</property>

<property name="hibernate.connection.CharSet">utf8</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.useUnicode">true</property>

<!-- JDBC connection pool (use the built-in) -->
<property name="connection.pool_size">1</property>
<!-- SQL dialect -->
<!-- Enable Hibernate's automatic session context management -->
<property name="current_session_context_class">thread</property>
<!-- Disable the second-level cache -->
<property name="cache.provider_class">org.hibernate.cache.NoCacheProvider</property>
<!-- Echo all executed SQL to stdout -->
<property name="show_sql">true</property>

<!-- Drop and re-create the database schema on startup -->
<!-- créer la BD -->
<!-- property name="hbm2ddl.auto">create</property -->
<!-- Met la BD existante à jour -->
<!-- property name="hbm2ddl.auto">update</property -->
<property name="hibernate.hbm2ddl.auto">update</property>

<!-- Mapping des classes persistantes -->

<mapping class="com.church.metier.User" />
<mapping class="com.church.metier.Comment" />
<mapping class="com.church.metier.Text" />
<mapping class="com.church.metier.MessageText" />
<mapping class="com.church.metier.MessageVideo" />
<mapping class="com.church.metier.News" />
<mapping class="com.church.metier.VerseMonth" />
<mapping package="com.church.metier" />


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

当我检索时:

System.out.println(VerseMonthDAO.retrieveVersetMonth());

我的 DAO:

package com.church.DAO;

import com.church.metier.VerseMonth;

import java.util.Locale;

import org.hibernate.Session;
import org.springframework.cglib.core.Local;
import org.springframework.context.i18n.LocaleContextHolder;

import com.church.util.HibernateUtil;

public class VerseMonthDAO {

public static void savaOrUpdate(VerseMonth verse) {
Session hibernateSession = HibernateUtil.getSession();
org.hibernate.Transaction transc = null;

try {
transc = hibernateSession.beginTransaction();
hibernateSession.saveOrUpdate(verse);
transc.commit();
} catch(Exception e) {
if (transc != null) {
transc.rollback();
}
e.printStackTrace();
} finally {
hibernateSession.close();
}
}

public static String retrieveVersetMonth() {
Locale locale = LocaleContextHolder.getLocale();
String language = locale.getLanguage();

if (language.equals("en")) {
language = "textEn";
} else if (language.equals("in")) {
language = "textIn";
} else {
language = "textFr";
}

Session hibernateSession = HibernateUtil.getSession();
org.hibernate.Transaction transc = null;
String verse = null;
Long count;

try {
transc = hibernateSession.beginTransaction();
count = ((Long) hibernateSession.createQuery("select count(*) from VerseMonth").uniqueResult());

verse = (String) hibernateSession.createQuery
("SELECT "+ language +" FROM VerseMonth verse WHERE verse.verseId = '" + count.intValue() + "'")
.uniqueResult();

transc.commit();
} catch(Exception e) {
if (transc!=null) {
transc.rollback();
}
e.printStackTrace();
} finally {
hibernateSession.close();
}

return verse;
}

public static String retrieveSourceMonth() {
Locale locale = LocaleContextHolder.getLocale();
String language = locale.getLanguage();

if (language.equals("en")) {
language = "sourceEn";
} else if (language.equals("in")) {
language = "sourceIn";
} else {
language = "sourceFr";
}

Session hibernateSession = HibernateUtil.getSession();
org.hibernate.Transaction transc = null;
String source = null;
Long count;

try {
transc = hibernateSession.beginTransaction();
count = ((Long) hibernateSession.createQuery("select count(*) from VerseMonth").uniqueResult());

source = (String) hibernateSession.createQuery
("SELECT "+ language +" FROM VerseMonth verse WHERE verse.verseId = '" + count.intValue() + "'")
.uniqueResult();

transc.commit();
} catch(Exception e) {
if (transc!=null) {
transc.rollback();
}
e.printStackTrace();
} finally {
hibernateSession.close();
}

return source;
}
}

我的数据库:

+---------+----------------+----------------+----------------+-------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
| verseId | SOURCEEN | SOURCEFR | SOURCEIN | TEXTEN | TEXTFR | TEXTIN |
+---------+----------------+----------------+----------------+-------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+
| 1 | Je bâtirai | Je bâtirai | Je bâtirai | Je bâtirai | Je bâtirai | Je bâtirai |
+---------+----------------+----------------+----------------+-------------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+-----------------------------------------------------------------------------------------------------+

感谢您的回答

最佳答案

我找到了答案使用这些参数配置 Hibernate 后:

<property name="hibernate.connection.CharSet">utf8</property>
<property name="hibernate.connection.characterEncoding">utf8</property>
<property name="hibernate.connection.useUnicode">true</property>

我们还必须在 web.xml 中使用以下参数将 Spring 配置为 UTF-8:

<filter>
<filter-name>SetCharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>SetCharacterEncodingFilter</filter-name>
<url-pattern>*</url-pattern>
</filter-mapping>

而且有效!谢谢大家

关于java - 来自 Hibernate 的 UTF-8,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39358475/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com