Mysql
 sql >> база данни >  >> RDS >> Mysql

Вмъкване на неподписано 64-битово число в колона BigInt MySQL с помощта на Java и JDBC

Ето го решението:

Ако не използвате оператор за подготовка и просто вмъквате с помощта на SQL оператор за низ, няма за какво да се притеснявате, защото JDBC просто премества оператора ви към MySQL сървър и MySQL сървърът може правилно да анализира низа до неподписано 64 число (BigInt-20).

Ако използвате изявление за подготовка, тогава сте в беда. Ако го направите:

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

ще получите изключение MySqlDataTruncation, защото JDBC иска да съкрати това до signed long.

Ако го направите:

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

Това ще работи, защото стойността е в рамките на дългия знак на Java.

Така че заобиколното решение, което винаги работи, е:

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

В крайна сметка предавате данните като низ и оставяте MySQL сървъра да ги анализира правилно.

Някой трябва да поправи JDBC драйвера, защото неподписани 64-битови числа продължават да се появяват в много статистически приложения.



  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Дата между 2 други дати, без да се взема предвид годината

  2. Неизвестна колона в „списък с полета“, когато заместителят на подготвеното изявление е в подзаявка

  3. променете mysql на pdo и съхранете резултата в променлива

  4. как да използвам JSON данни в chart.js?

  5. Как да създадете Pivot таблица в Laravel