Mysql
 sql >> Baza danych >  >> RDS >> Mysql

Wstawianie niepodpisanej liczby 64-bitowej do kolumny BigInt MySQL za pomocą Javy i JDBC

Oto rozwiązanie:

Jeśli nie używasz instrukcji przygotowania, a jedynie wstawiasz ciąg znaków SQL, nie masz się czym martwić, ponieważ JDBC po prostu przenosi Twoją instrukcję na serwer MySQL, a serwer MySQL może poprawnie przeanalizować ciąg do liczby bez znaku 64 (BigInt-20).

Jeśli użyjesz instrukcji przygotowania, masz kłopoty. Jeśli tak:

BigInteger bi = new BigInteger("18446744073709551615"); // max unsigned 64-bit number
statement.setObject(2, bi, Types.BIGINT);
statement.execute();

otrzymasz wyjątek MySqlDataTruncation, ponieważ JDBC chce skrócić to do długości podpisu.

Jeśli tak:

BigInteger bi = new BigInteger(new Long(Long.MAX_VALUE).toString());
statement.setObject(2, bi, Types.BIGINT);
statement.execute();

To zadziała, ponieważ wartość jest długo podpisana w Javie.

Tak więc obejście, które zawsze działa, to:

BigInteger bi = new BigInteger("18446744073709551615"); // max unsigned 64-bit number
statement.setString(2, bi.toString());
statement.execute();

W końcu przekazujesz dane jako ciąg i pozwalasz serwerowi MySQL na ich prawidłowe przeanalizowanie.

Ktoś powinien naprawić sterownik JDBC, ponieważ niepodpisane liczby 64-bitowe wciąż pojawiają się w wielu aplikacjach statystycznych.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. mysql Dlaczego zmienna nie zmienia się w if

  2. Wybierz zapytanie za pomocą warunku

  3. Kod błędu:1062. Zduplikowany wpis „1” dla klucza „PRIMARY”

  4. MySQL zwraca dokładne dopasowanie słów z treści tekstowej

  5. Nie można rzutować obiektu typu „System.DBNull” na typ „System.Byte[]”.