2010-10-17 6 views
4

J'utilise actuellement INT comme type de clé primaire dans JavaDB (Apache Derby), mais comme j'implémente un système distribué, je voudrais changer le type en java.util.UUID. Quelques questions à ce sujet:Comment utiliser UUID avec JavaDB/Derby et JDBC?

  • Quel type de données en JavaDB/Derby dois-je utiliser pour UUID? J'ai vu CHAR(16) FOR BIT DATA été mentionné mais je ne sais pas beaucoup à ce sujet. Est-ce que VARCHAR(16) est une alternative?

  • Comment l'utiliser avec JDBC? Par exemple. dans un PreparedStatement, comment dois-je définir et obtenir un UUID?

  • Si plus tard je devrais changer de base de données à SQL Server, existe-t-il un type de données compatible avec java.util.UUID?

Simplement, Comment dois-je utiliser UUID avec JavaDB/Derby et JDBC?

Répondre

10

UUID est une valeur de 128 bits. Le type CHAR(16) FOR BIT DATA reflète que ce sont des données de bits stockées sous forme de caractère pour la concision. Je ne pense pas VARCHAR(16) fonctionnerait parce qu'il n'a pas le drapeau de bit. La base de données devrait être capable de convertir les données binaires en données de caractères qui traitent de l'encodage et sont risquées. Plus important encore, cela ne vous achèterait rien. Depuis un UUID est toujours 128 bits, vous n'obtenez pas l'économie d'espace en utilisant VARCHAR sur CHAR. Donc, vous pouvez aussi bien utiliser le CHAR(16) FOR BIT DATA. Avec JDBC, je pense que vous utilisez la méthode get/setBytes() car il s'agit de petites quantités de données binaires. (Pas positif, devrait essayer cela)

Et aucune idée sur la partie SQL Server.

-4

Vous pouvez convertir l'UUID en chaîne et le stocker en tant que VARCHAR. La plupart des formats de chaîne UUID sont similaires à celui-ci: 32 chiffres séparés par des tirets: 00000000-0000-0000-0000-000000000000, alors vous voudriez un VARCHAR (36), ou faites-en quelque chose comme VARCHAR (64) si vous voulez , car cela ne fait pas de mal d'avoir de l'espace supplémentaire disponible dans votre VARCHAR - seuls les chiffres réels sont stockés. Une fois que vous l'avez convertie en chaîne, appelez simplement Statement.SetString pour l'inclure dans votre instruction INSERT.

3

Si vous souhaitez toujours utiliser l'objet UUID dans votre code, vous pouvez utiliser fromString pour créer des objets UUID à partir de la base de données et toString pour les stocker dans la base de données.

Questions connexes