Maison >Java >javaDidacticiel >Comment gérer les caractères chinois tronqués dans Java Oracle

Comment gérer les caractères chinois tronqués dans Java Oracle

coldplay.xixi
coldplay.xixioriginal
2020-08-17 13:49:252706parcourir

Solution au code tronqué chinois d'Oracle Java : 1. Effectuez un transcodage manuel de la chaîne lue s, le code est [new String(s.getByte(A), B)] 2. Druid est utilisé pour fournir ; une couche unifiée d'encapsulation et de conversion d'encodage pour divers pilotes de base de données.

Comment gérer les caractères chinois tronqués dans Java Oracle

[Recommandations d'apprentissage associées : Tutoriel de base Java]

Solution au code tronqué chinois d'Oracle Java :

Méthode de transcodage

Lorsque Java lit Oracle et rencontre des caractères chinois tronqués, nous devons transcoder. Il existe de nombreuses méthodes de transcodage, celles que j'ai rencontrées sont les suivantes.

1. Transcodage manuel pur

Transcoder les chaînes lues, telles que : new String(s.getByte(A), B)

2 , Druid

Druid est un pilote développé par Alibaba lui-même. Il encapsule en fait divers pilotes de base de données dans une couche unifiée, ajoutant des fonctions telles que la journalisation, les alarmes et la conversion d'encodage. La méthode de configuration est la suivante :

<bean id="opensqlDataSource"
class="org.apache.commons.dbcp.BasicDataSource"
destroy-method="close">
<property name="driverClassName" value="com.alibaba.china.jdbc.SimpleDriver" />
<property name="url" value="jdbc:oracle:thin:@10.20.130.210:1521:dwtest" />
<property name="username" value="etl" />
<property name="password" value="etl" />
<property name="connectionProperties"><value>serverEncoding=ISO-8859-1;clientEncoding=GBK;defaultRowPrefetch=50;bigStringTryClob=true</value></property>
</bean>

où connectionProperties contient deux propriétés : serverEncoding et clientEncoding. Une fois que Java a lu les données, s'il s'avère que serverEncoding et clientEncoding sont différents, la conversion d'encodage suivante sera automatiquement effectuée.

new String(s.getByte(serverEncoding), clientEncoding)

3. Rappel ibatis weblade

Il utilise la méthode suivante pour enregistrer le rappel ibatis.

<bean id="sqlMapExecutorDelegate"
class="com.asc.alibaba.dao.ibatis.sqlmap.engine.impl.SqlMapExecutorDelegate">
<property name="mappedStatementStrategy" ref="mappedStatementStrategy" />
<property name="handlerList">
<list>
<ref bean="stringHandler" />
<!-- <ref bean="objectHandler" />-->
</list>
</property>
</bean>
<bean id="stringHandler" class="com.asc.alibaba.dao.ibatis.handler.TypeHandlerAdapter">
<property name="javaType" value="java.lang.String" />
<property name="handlerCallback" ref="stringTypeHandlerCallback" />
</bean>

amène le programme à convertir par défaut la chaîne obtenue par ibatis comme suit :

new String(s.getByte(“ISO-8859-1”), “GBK”)

La bibliothèque secondaire est présentée comme suit :

<dependency>
<groupId>com.alibaba.asc.shared</groupId>
<artifactId>weblade.core.ibatisext</artifactId>
<version>1.2.0-SNAPSHOT</version>
</dependency>

Ibatis Le rappel se cache le processus de conversion d'encodage, mais le problème est qu'il prend effet sur toutes les sources de données du projet. Cela rend impossible la prise en charge transparente des sources de données qui nécessitent un transcodage et de celles qui ne nécessitent pas de transcodage en même temps.

Recommandations associées : Cours vidéo de programmation

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn