2010-12-03 10 views
0

J'utilise une base de données MYSQL pour stocker des données persistantes pour une application Java. Comme vous pouvez le voir, je crée une table qui stocke pour chaque ligne 4 CHAR différents.Comment entrer des caractères Java dans la base de données MYSQL et les récupérer aussi?

sql je l'ai écrit pour inputing les caractères dans la table est

char k1[] = new char[2] 
char p[] = new char[2]; 

k1[0]=0x00aa; 
k1[1]=(char)0xaaaa; 

p[0]=0x0001; 
p[1]=0x0002; 

sql = "INSERT INTO testtable1 " 
       +"(key1a, key1b , encoded1a,encoded1b) " 
       + "VALUES " 
       + "('"+ k1[0] + "'," 
       + "'"+ k1[1] + "'," 
       + "'"+ p[0] + "'," 
       + "'"+ p[1] + "')"; 

La déclaration ci-dessus, je ne pense pas que le travail. il inpts les données en tant que telles alt text

Et puis dans la base de données comme celui-ci alt text

Comme vous pouvez le voir, il est été introduit, avec un? (whatis cela?), puis les deux dernières colonnes sont ne pas être peuplé.

Ainsi, n'importe lequel d'entre vous pourrait me pointer dans la bonne direction où ma pensée est erronée quand il s'agit de stocker la variable char.

Et aussi, comment puis-je récupérer les caractères de la table de base de données? comme je ne trouve pas de Doc à ce sujet ???

merci beaucoup

+0

Vous voulez stocker un 'CHAR' mais vous avez un' char [] 'en java ... pourquoi? –

+0

cet appel à k1 [0] retournera une variable char. Il ira au numéro d'index dans le tableau char et renverra une variable char – molleman

Répondre

3

Je suggère à la recherche dans PreparedStatement.

Un exemple serait le suivant:

PreparedStatement ps = nulll; 
try { 
    ps = connection.prepareStatement("INSERT INTO testtable1 (key1a, key1b , encoded1a,encoded1b) VALUES (? ,? ,?, ?)"); 
    for (int i = 1; i <= k.length; i++) { 
     ps.setString(i, "" + k[i]); 
    } 

    ps.executeUpdate(); 
} catch (SQLException) { 
    //Log exception 
} finally { 
    if (ps != null) { 
     try { 
      ps.close(); 
      ps = null; 
     } catch (SQLException e) {} 
    } 
} 

Le problème ici est que si la longueur de char[]k est supérieur à 4, une exception sera levée.

+0

"Tout d'abord, un caractère dans java est une valeur d'octet de gamme [0..255]" Non ce n'est pas, un char est un deux -byte, valeur UTF-16. – Powerlord

+0

@R Bemrose, ouais, merci ... l'ai trouvé ... J'ai enlevé ma déclaration. –

+0

les données sont en cours d'entrée en tant que? encore, des idées pourquoi? comment puis-je lire le caractère de la base de données? – molleman

2

En plus de la réponse PreparedStatement:

Java de char est une UTF-16 valeur 16 bits.

Le CHAR de MySQL est un synonyme de CHAR(1) ... qui est juste un seul caractère, (le nombre d'octets dépend du jeu de caractères de la table).

Maintenant, setString de PreparedStatementdevrait prendre en charge la conversion d'encodage pour vous, mais cela laisse encore un problème: MySQL sur certains paramètres par défaut des systèmes de jeu de caractères latin1. Ce qui signifie CHAR est trop petit.

Il existe un correctif pour cela. Lors de la création de la table, vous pouvez forcer une table pour être un jeu de caractères spécifique:

CREATE TABLE testtable1(key1a CHAR, key1b CHAR, encoded1a CHAR, encoded1b CHAR) CHARACTER SET utf8; 

Remarque: Vous pouvez également utiliser utf16 au lieu de utf8; Je viens d'utiliser utf8 pour des raisons de taille de stockage.

Questions connexes