2010-12-07 24 views
4

En raison de contraintes mathématiques, je dois utiliser la classe BigInteger pour représenter les valeurs.Stockez BigInteger dans Mysql

Après quelques calculs, je voudrais stocker le résultat (données par cas 2x BigInteger) dans Mysql ...

Quel est le meilleur type de données pour stocker cet objet?

Je pensais à utiliser un blob pour stocker le format binaire de ces résultats (128 bits)? Mais je voudrais éviter les conversions de type inutiles.

+0

N'est-ce pas assez grand? (est juste 8 octets) – cristian

Répondre

5

Je recommanderais d'utiliser un Blob puis le constructeur BigInteger(byte[] val) pour passer du tableau d'octets à BigInteger, et la méthode BigInteger#toByteArray() pour l'autre.

+0

qu'en est-il des comparaisons. Je veux stocker et comparer biginteger. – Jus12

+0

Pour autant que je sache, mysql n'a pas de support pour les grands nombres arbitraires. – aioobe

-1

MySQL a un type de données BIGINT comme indiqué dans: http://dev.mysql.com/doc/refman/5.0/en/numeric-types.html

Vous pouvez essayer d'utiliser la BIGINT pour cette conversion plutôt faire ensuite aux formats binaires qui le rend beaucoup plus complexe à mon avis.

+2

Le type de données BIGINT de MySQL ne peut pas tenir ma valeur! 2^128> 18446744073709551615 (valeur maximale non signée BIGINT)! – Kami

+0

Ce n'est pas vraiment BigInteger je suppose ... c'est bien plus que la taille spécifique de BigInteger. – thotheolh

+0

BigInteger a différentes significations dans différents contextes. La question est étiquetée "java", où BigInteger signifie une précision arbitraire. – b0fh

6
MySQL Type  Java Type 
---------------------------------------- 
CHAR   String 
VARCHAR   String 
LONGVARCHAR  String 
NUMERIC   java.math.BigDecimal 
DECIMAL   java.math.BigDecimal 
BIT    boolean 
TINYINT   byte 
SMALLINT  short 
INTEGER   int 
BIGINT   long 
REAL   float 
FLOAT   double 
DOUBLE   double 
BINARY   byte [] 
VARBINARY  byte [] 
LONGVARBINARY byte [] 
DATE   java.sql.Date 
TIME   java.sql.Time 
TIMESTAMP  java.sql.Tiimestamp 

Reference

+0

Le lien solitaire est [considéré comme une mauvaise réponse] (http://stackoverflow.com/faq#deletion) car il n'a aucune signification en lui-même et la ressource cible n'est pas garantie d'être active dans le futur. [Il serait préférable] (http://meta.stackexchange.com/q/8259) d'inclure les parties essentielles de la réponse ici, et de fournir le lien pour référence. – j0k

+0

Mis à jour - merci. – nicc777

1

Afin de stocker bigInteger valeurs dans MySQL, nous pouvons stocker sous forme de chaînes:

  1. Convertir biginteger-string:

    String s=bigint_value.toString(); 
    
  2. magasin s dans le champ de table qui est de type text; par exemple. si nous stockons s dans une table nommée big_values ayant champ big_value_as_string:

    CREATE TABLE big_values (big_value_as_string text); 
    

    La valeur est mémorisée.

Pour récupérer, nous devons:

  1. Extrayez valeur de chaîne de la table:

    String bg = rs.getString("big_value_as_string"); 
    
  2. Convertir la chaîne type bigInteger:

    BigInteger b = new BigInteger(bg);