web-dev-qa-db-fra.com

Comment insérer Big Integer dans l'instruction Java préparée

Je veux insérer une valeur entière Big en utilisant une instruction préparée, j'ai une variable de chaîne appelée xid (41527820021925053) 

    preparedStatement = conn.prepareStatement(sql);
    preparedStatement.setObject(1,XOBJ);
    preparedStatement.setObject(2,YOBJ);
    preparedStatement.setBigInteger(3, xid);
    preparedStatement.setInt(4, 23);
    preparedStatement.executeUpdate();
    preparedStatement.close();

Je suis nouveau à cela comment y parvenir.

7
user7098544

PreparedStatement n'a pas de méthode setBigInteger().

Utilisez l'une de ces méthodes:


UPDATE

Avec le commentaire suivant fait par OP , la deuxième option ci-dessus (maintenant mise en surbrillance) est la bonne à utiliser, car PostgreSQL bigint est identique à Java long.

les gars que j'utilise postgres et il a bigint ["UniqueIdGenerator" ()] type de données, qui est un grand entier de 17 chiffres.

12
Andreas

Si vous parlez d'un entier ou d'une valeur longue dans une chaîne, vous devriez pouvoir utiliser simplement setString(idx, yourValue), setObject(idx, yourValue) ou setObject(idx, yourValue, Java.sql.Types.BIGINT), le pilote doit convertir cela en type de cible.

Si vous parlez d'un Java.math.BigInteger, un pilote compatible JDBC 4.1 (ou supérieur) devrait vous permettre de définir une valeur BigInteger sur une colonne BIGINT, CHAR, VARCHAR ou LONGVARCHAR à l'aide de setObject(idx, yourBigInteger), ou setObject(idx, yourBigInteger, targetType), où targetType est comme exemple Java.sql.Types.BIGINT ou Java.sql.Types.VARCHAR.

Cependant, sachez que tous les pilotes n'implémentent pas ce support.

Voir Spécification JDBC 4.1 section 3.1 Vue d'ensemble des modifications , table B-4 Correspondance entre types d'objet Java et types JDBC , table B-5 Conversions effectuées par setObject et setNull Entre les types d'objet Java et les types JDBC cibles . Ou bien, Spécification JDBC 4.2 , mais uniquement les tableaux B-4 et B-5.

1
Mark Rotteveel

Tu peux essayer 

    preparedStatement = conn.prepareStatement(sql);
    preparedStatement.setObject(1,XOBJ);
    preparedStatement.setObject(2,YOBJ);
    preparedStatement.setBigDecimal(3, BigDecimal.valueOf(Long.parseLong(xid))); //or you can try below
    preparedStatement.setBigDecimal(3, new BigDecimal(xid)); //both are correct
    preparedStatement.setInt(4, 23);
    preparedStatement.executeUpdate();
    preparedStatement.close();
0
deadpool