web-dev-qa-db-de.com

Wie man Big Integer in die vorbereitete Anweisung java einfügt

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.

7
user7098544

PreparedStatementNAME_ hat keine setBigInteger()-Methode.

Wenden Sie eine der folgenden Methoden an:


UPDATE

Mit dem folgenden Kommentar von OP ist die zweite Option oben (jetzt hervorgehoben) die richtige Option, da PostgreSQL bigintein Java longist.

jungs ich benutze postgres & es hat bigint ["UniqueIdGenerator" ()] datentyp, der eine 17 stellige große ganze zahl ist.

12
Andreas

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.

1
Mark Rotteveel

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();
0
deadpool