IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

JDBC Java Discussion :

Problème d'accents lors d'un UPDATE


Sujet :

JDBC Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 57
    Par défaut Problème d'accents lors d'un UPDATE
    Bonjour,

    J'ai deux bases sql server 2008R2 (BD1 et DB2). Je souhaite sélectionner des données dans DB1 et les insérer dans BD2.

    Ex : Dans BD1, table salarié avec champs nom et prénom
    Quand je récupère ces données, pb avec les caractères spéciaux qui s'affichent avec un "?". Je passe donc par un encodage :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    String prenom = new String(resultSet.getBytes("PRENOM_SALARIE"),"ISO-8859-1");
    J'ai essayé avec UTF-8 mais ça ne passe qu'en ISO. L'encodage de la base (Classement) est "French_CI_AS".
    Une fois que j'ai mes données qui s'affichent correctement, je fais un UPDATE vers DB2 :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    String requete = "UPDATE salarie SET prenom_salarie = '"+prenomSalarie+"', nom_salarie = '"+nomSalarie+"' WHERE id_salarie = "+idSalarie;
    Statement s = connexion.createStatement();
    //connexion est initialisé avant avec un DriverManager.getConnection(urlServeur);
    s.executeUpdate(requete);
    s.close();
    Une fois mise à jour les données dans DB2 s'affichent avec des "é" à la place des caractère spéciaux.
    Auriez-vous une solution à ce problème?
    Merci d'avance

  2. #2
    Membre émérite Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Par défaut
    Salut !
    Un PreparedStatement pourrait-il faire l'affaire ?

  3. #3
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 57
    Par défaut
    Merci de ta réponse, je vais tester !

  4. #4
    Membre Expert
    Homme Profil pro
    Directeur technique
    Inscrit en
    Janvier 2007
    Messages
    1 348
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 348
    Par défaut
    A priori c'est pas top de gérer l'encoding comme tu le fais. La "bonne" façon de procéder, c'est de spécifier l'encoding dans la chaîne de connection JDBC (cf la doc de ton driver JDBC)

  5. #5
    Expert éminent
    Avatar de tchize_
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Avril 2007
    Messages
    25 482
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 46
    Localisation : Belgique

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2007
    Messages : 25 482
    Par défaut
    En faisant ça

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String prenom = new String(resultSet.getBytes("PRENOM_SALARIE"),"ISO-8859-1");
    Au mieux tu recrée exactement la même chaine (si ton encodage par défaut est iso-8859-1), au pire tu crée délibérément une chaine corrompue dans l'espoir de faire l'opération inverse d'une corruption qui a déjà eu lieu , avec 90% de chances de faire pire.

    Il faut faire les opération suivante:
    1) s'assurer que les données ne sont pas déjà corrompue sur la première base de données. Selon la même bidouille que tu fais, ça peux être le cas même sans s'en rendre compte. (Ton interface graphique habituelle merdouille symétriquement et donc "corrige" les données corrompue à l'affichage). Le plus simple pour ce check est de prendre un chaine contenant, par exemple Ä ou Ü ou d'autres caractères n'existant pas en iso-8859-1, de l'y stocker avec l'interface habituelle, et de lancer une requete SQL qui compte les caractères ou qui convertis en caractères non accentués ou qui, pour chaque caractère de la chaine, affiche sa valeur unicode. Tu saura tout de suite si le SGBD vois bien ce que tu pense qu'il vois
    2) comme dit, voir dans la config de ton driver si il parle bien le même encoding que la DB (souvent, c'est automatique, mais je ne connais pas SQL server)
    3) voir si c'est pas au transfert vers la deuxième DB que tu aurais le problème inverse (Envoyer une chaine connue genre "Héhéhé höµhòhó" et regarder si ça arrive correctement)
    4) voir si c'est pas à l'affichage final que tu as le problème.

  6. #6
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 57
    Par défaut
    Le preparedstatement n'a rien fait de mieux!
    Concernant l'encodage de la connexion j'ai tenté de rajouter "charset=UTF-8" à la fin de ma chaîne de connexion, sans succès.
    J'ai épluché la doc de mon driver (sqljdbc4.jar) et rien trouvé pour renseigner l'encodage. Je continue de chercher.

    Merci à vous

  7. #7
    Membre averti
    Inscrit en
    Septembre 2010
    Messages
    57
    Détails du profil
    Informations forums :
    Inscription : Septembre 2010
    Messages : 57
    Par défaut
    J'avais pas vu ta réponse tchize_, je teste tout ça, merci.

Discussions similaires

  1. [MySQL] Problème d'accent lors de la récupération d'infos
    Par 2rock dans le forum PHP & Base de données
    Réponses: 7
    Dernier message: 03/05/2009, 18h08
  2. [HTML] problème d'accent lors de l'affichage
    Par teac2006 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 2
    Dernier message: 20/06/2008, 17h06
  3. Problême d'accent lors de la création d'un fichier txt
    Par maxmarie dans le forum Windows Mobile
    Réponses: 15
    Dernier message: 24/08/2007, 21h59
  4. Réponses: 3
    Dernier message: 07/06/2007, 13h22
  5. Problème d'accent lors d'une requête
    Par escape dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 05/12/2006, 13h48

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo