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.
[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!