Mysql
 sql >> Teknologi Basis Data >  >> RDS >> Mysql

Memasukkan nomor 64-bit yang tidak ditandatangani ke dalam kolom BigInt MySQL menggunakan Java dan JDBC

Jadi inilah solusinya:

Jika Anda tidak menggunakan pernyataan persiapan dan hanya menyisipkan menggunakan pernyataan string SQL, Anda tidak perlu khawatir karena JDBC hanya memindahkan pernyataan Anda ke server MySQL dan server MySQL dapat dengan benar mengurai string ke nomor 64 yang tidak ditandatangani (BigInt-20).

Jika Anda menggunakan pernyataan persiapan, maka Anda berada dalam masalah. Jika Anda melakukannya:

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

Anda akan mendapatkan pengecualian MySqlDataTruncation karena JDBC ingin memotong ini menjadi panjang yang ditandatangani.

Jika Anda melakukannya:

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

Ini akan berfungsi karena nilainya berada dalam panjang yang ditandatangani Java.

Jadi solusi yang selalu berhasil adalah:

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

Anda akhirnya meneruskan data sebagai string dan membiarkan server MySQL menguraikannya dengan benar.

Seseorang harus memperbaiki driver JDBC karena nomor 64-bit yang tidak ditandatangani terus muncul di banyak aplikasi statistik.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Mendapatkan hari pertama dalam seminggu di MySql menggunakan Minggu No

  2. Praktik penyatuan koneksi JDBC MySql untuk menghindari kumpulan koneksi yang habis

  3. laravel errno 150 batasan kunci asing salah dibentuk

  4. Parsing hasil kueri mySQL dan bentuk array untuk if/else

  5. com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: