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.
PreparedStatement
n'a pas de méthode setBigInteger()
.
Utilisez l'une de ces méthodes:
setBigDecimal(3, new BigDecimal(xid))
setLong(3, Long.parseLong(xid))
si la valeur peut tenir dans une long
setString(3, xid)
pour laisser le pilote JDBC convertir la chaîne pour vousUPDATE
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.
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.
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();