Mysql
 sql >> Cơ Sở Dữ Liệu >  >> RDS >> Mysql

Chèn số 64-bit không dấu vào cột BigInt MySQL bằng Java và JDBC

Vì vậy, đây là giải pháp:

Nếu bạn không sử dụng câu lệnh chuẩn bị và chỉ chèn bằng câu lệnh SQL chuỗi, bạn không có gì phải lo lắng vì JDBC chỉ cần di chuyển câu lệnh của bạn đến máy chủ MySQL và máy chủ MySQL có thể phân tích cú pháp chính xác chuỗi thành số 64 không dấu (BigInt-20).

Nếu bạn sử dụng câu lệnh chuẩn bị, thì bạn đang gặp rắc rối. Nếu bạn làm như vậy:

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

bạn sẽ nhận được một ngoại lệ MySqlDataTruncation vì JDBC muốn cắt ngắn điều này thành dài đã ký.

Nếu bạn làm như vậy:

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

Điều này sẽ hoạt động vì giá trị nằm trong ký tự dài của Java.

Vì vậy, giải pháp luôn hoạt động là:

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

Cuối cùng, bạn chuyển dữ liệu dưới dạng một chuỗi và để máy chủ MySQL phân tích cú pháp nó đúng cách.

Ai đó nên sửa trình điều khiển JDBC vì các số 64-bit không có dấu liên tục xuất hiện trong nhiều ứng dụng thống kê.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Cách để có được 7 ngày qua bằng PHP

  2. MySQL làm thế nào để làm cho giá trị hết hạn?

  3. INET_ATON () và INET_NTOA () trong PHP?

  4. Làm cách nào để nhóm theo tháng và năm khi chỉ có trường ngày giờ?

  5. Làm cách nào tôi có thể bỏ qua một cột khỏi câu lệnh SELECT trong khi sử dụng nó trong mệnh đề HAVING?