Ich möchte einen Big Integer-Wert mithilfe der vorbereiteten Anweisung einfügen. Ich habe eine String-Variable namens 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();
Ich bin neu darin, wie man das erreicht.
PreparedStatement
NAME_ hat keine setBigInteger()
-Methode.
Wenden Sie eine der folgenden Methoden an:
setBigDecimal(3, new BigDecimal(xid))
setLong(3, Long.parseLong(xid))
wenn der Wert in eine long
passen kann setString(3, xid)
, damit der JDBC-Treiber die Zeichenfolge für Sie konvertiertUPDATE
Mit dem folgenden Kommentar von OP ist die zweite Option oben (jetzt hervorgehoben) die richtige Option, da PostgreSQL bigint
ein Java long
ist.
jungs ich benutze postgres & es hat bigint ["UniqueIdGenerator" ()] datentyp, der eine 17 stellige große ganze zahl ist.
Wenn Sie von einer Ganzzahl oder einem langen Wert in einem String sprechen, sollten Sie nur setString(idx, yourValue)
, setObject(idx, yourValue)
oder setObject(idx, yourValue, Java.sql.Types.BIGINT)
verwenden können. Der Treiber sollte dies in den Zieltyp konvertieren.
Wenn Sie von Java.math.BigInteger
sprechen, sollten Sie mit einem JDBC 4.1 (oder höher) -kompatiblen Treiber den Wert BigInteger
auf BIGINT
, CHAR
, VARCHAR
oder LONGVARCHAR
Spalte mit setObject(idx, yourBigInteger)
oder setObject(idx, yourBigInteger, targetType)
wobei targetType
zum Beispiel Java.sql.Types.BIGINT
oder Java.sql.Types.VARCHAR
ist.
Beachten Sie jedoch, dass nicht alle Treiber diese Unterstützung implementieren.
Siehe JDBC 4.1-Spezifikation Abschnitt 3.1 Übersicht über Änderungen , Tabelle B-4 Zuordnung von Java-Objekttypen zu JDBC-Typen , Tabelle B-5 Konvertierungen durchgeführt von setObject
und setNull
Zwischen Java-Objekttypen und Ziel-JDBC-Typen . Oder alternativ JDBC 4.2-Spezifikation , aber dann nur die Tabellen B-4 und B-5.
Du kannst es versuchen
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();