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

Langage Java Discussion :

Stockage de caractères dans une base


Sujet :

Langage Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Par défaut Stockage de caractères dans une base
    Bonjour,

    Afin de réduire la quantité d'informations à stocker je voudrais passer par le système suivant :

    - un heure en minute (de 0 à 1440) sous la forme de 11 bits (ex 00000010000 = 16 minutes),
    - un type de 0 à 7 sous la forme de 3 bits (ex 010 = type 2)

    pour cela je veux concaténer les deux chaines de bits puis les transformer en tableau de char pour les stocker dans la base. Pour cela, je fais :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String bits = Integer.toBinaryString(time+(int)Math.pow(2,11)).substring(1) + Integer.toBinaryString(type+(int)Math.pow(2,3)).substring(1) + "00"
    bits représente donc 16 caractères 0 ou 1.

    Ensuite je transforme en tableau de 2 char :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    char[] chars = new char[2];
    		chars [0] = (char)Integer.parseInt(bits.substring(0,8), 2);
    		chars [1] = (char)Integer.parseInt(bits.substring(8,16), 2);
    Je fais cela plusieurs fois, en récuperant tous les tableaux de char dans un string

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    String toSave += String.valueOf(charTo);
    Jusqu'ici tout va bien...

    Par contre quand je veux sotcker ca dans la base (mysql) :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statement.setObject(3,activities,Types.VARCHAR);
    il me rajoute des octets "parasites", (exemple, pour la caractère 0xa4 il marque 0xc382c2a4)

    J'ai essayé aussi ca,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    statement.setBytes(3,activities.getBytes());
    La j'ai moins de "parasites" mais j'en ai toujours...

    Je pense qu'il y a une raison pour qu'il soit la mais je ne trouve rien qui m'aiderai à résoudre le soucis...

    Si quelqu'un pouvait me donner un coup de main ca serait sympa !

    Merci d'avance.

  2. #2
    Membre Expert Avatar de Uther
    Homme Profil pro
    Tourneur Fraiseur
    Inscrit en
    Avril 2002
    Messages
    4 679
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Tourneur Fraiseur

    Informations forums :
    Inscription : Avril 2002
    Messages : 4 679
    Par défaut
    Java possède des opérateurs binaires qui permettent de faire cela de manière plus simple et plus efficace.
    Par exemple pour la date tu peux faire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    chars [0] = time >> 8;
    chars [1] = time & 0xFF;
    Attention cependant je ne sais pas comment ta base de données stoques ses nombres, mais en java, un char fait 2 octets. Si tu veux stoker sur un seul octet ,il faut recourir au byte.

  3. #3
    Membre éclairé
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    260
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 260
    Par défaut
    bon en fait il semble que ce soit la base (mysql) qui ne stockait pas sous format binaire (malgré que le champ soit en varchar binaire). En passant en format tinyblob cela fonctionne.

    Merci pour ton astuces, j'essaierai de fouiller la dedans pour optimiser un peu le processus.

    a+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [MySQL] Remplacer une chaîne de caractères dans une base de données
    Par Furius dans le forum PHP & Base de données
    Réponses: 10
    Dernier message: 27/11/2013, 21h06
  2. Stockage d'image dans une base sql server
    Par rafik1f dans le forum MS SQL Server
    Réponses: 1
    Dernier message: 24/03/2007, 10h07
  3. Réponses: 2
    Dernier message: 14/03/2007, 14h01
  4. Stockage de fichiers dans une base MySQL
    Par FredMines dans le forum SQL Procédural
    Réponses: 6
    Dernier message: 09/01/2006, 22h15
  5. Remplacer une chaîne de caractères dans une base
    Par Furius dans le forum Requêtes
    Réponses: 4
    Dernier message: 19/10/2005, 23h03

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