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.