2010-07-29 6 views
1

J'utilise SQLite dans le code Java via Zentus.Type long avec pilote SQLite et Zentus Jdbc

J'ai besoin de mapper Java long type primitif dans ma base de données. Pour cela j'ai essayé de créer des tables avec l'instruction suivante: CREATE TABLE MY TABLE (...., LONG time, ...).

L'insertion dans la base de données via Java avec Zentus fonctionne parfaitement, mais lors de la récupération des données, toujours via Java et Zentus, la valeur LONG est réduite à 32 bits.

J'ai essayé d'interroger la base de données directement avec SQlite et cela fonctionne, donc je suppose que le problème est le pilote JDBC.

Est-ce que certains d'entre vous ont déjà connu de tels problèmes, et comment l'avez-vous résolu?

Répondre

1

SQLite dispose de 4 types primitifs:

  • texte
  • Entier
  • réel
  • Blob

Quelques mots clés sont convertis en ces types, par défaut de mots-clés inconnus au texte. Le type "Integer" est un peu particulier, en ce que SQLite ne gardera que la taille minimum nécessaire pour enregistrer le plus grand nombre. Si votre plus grand nombre est inférieur à 2^31, il sera enregistré sur 32 bits. Je ne sais pas s'il rétrécit s'il est étendu à 64 bits, alors toutes les valeurs au-dessus de 2^31 sont supprimées, ou si cela reste le même. Il va certainement rétrécir si la base de données est sous vide.

Je peux suggérer de conserver un enregistrement factice avec une valeur de 64 bits, essayez de voir si JDBC se comporte après cela.

+0

Merci pour la réponse. Cela signifie que je peux créer ma table avec le type "LONGFOOBAR" par exemple et le résultat sera le même? Comme mentionné, je pense qu'il n'y a pas de problème au niveau SQLite, mais dans le pilote JDBC que j'utilise. Utilisez-vous SQLite à partir du code Java? –

+0

Non, j'utilise SQLite, mais avec un code différent, c'est pourquoi je ne peux pas vous donner une réponse 100% éclairée. Quant au type "LONGFOOBAR", il serait par défaut interne à "TEXT", mais "LONG" le serait aussi.Si le type a les lettres "INT", la colonne sera déclarée INTEGER.En insérant des entiers, une colonne TEXT les gardera comme. .. bien, je ne sais pas quoi .. Mais pour votre connecteur, préférez déclarer comme INTEGER – MPelletier

+0

Merci encore.Je lis les informations de typage SQLite, et je sais maintenant, grâce à vous, comment cela fonctionne et je voudrais modifier mes types à J'ai des colonnes INTEGER pour les valeurs numériques Même en connaissant et en modifiant cela, j'ai toujours mon problème et je pense qu'il y a un problème dans le pilote Zentus JDBC que j'utilise ... J'enquête ... –