来自SQL DB的BigInteger值格式错误

时间:2017-08-01 15:07:34

标签: android sql biginteger

如果我启动Android应用程序,应用程序会从数据库调用一些数据并将此数据保存在设备上的本地SQL数据库中。有一个值很大的值,所以我需要BigInteger来存储它。如果我尝试从本地DB调用该值,则会收到错误:

java.lang.NumberFormatException: Invalid BigInteger: 3.23431e+23

这是我将值存储在本地db中的方法:

...
values.put(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG, String.valueOf(battery.get(i).getServiceTag()));
...
db.insert(BatteryEntryContract.BatteryEntry.TABLE_NAME_BATTERY, null, values);

这是我从本地数据库中调用它的方式:

...
String serviceTagValue = cursor.getString(
                    cursor.getColumnIndexOrThrow(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG));
batteryFromDb.setServiceTag(new BigInteger(serviceTagValue));
...

我是否必须以特殊的方式格式化数据库中的值,而不是使用... e + 23?

修改 这是列类型的设置方式:

...
BatteryEntry.COLUMN_NAME_SERVICE_TAG + " TEXT DEFAULT 0," +
....

当我尝试

...
values.put(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG, 
String.valueOf(battery.get(i).getServiceTag()));
...
Log.i("---",values+"");
db.insert(BatteryEntryContract.BatteryEntry.TABLE_NAME_BATTERY, null, values);

当我从那里得到它时,外部数据库中的值保存为numeric(24,0)我将其保存为本地数据库中的字符串。当我Log.i("---",values+"");("值"将保存在本地数据库中)时,数字将显示正确:

.... serviceTag=323431303230313631333331 ....

1 个答案:

答案 0 :(得分:0)

如果您这样做会发生什么:

String serviceTagValue = cursor.getString(
                cursor.getColumnIndexOrThrow(BatteryEntryContract.BatteryEntry.COLUMN_NAME_SERVICE_TAG));
BigDecimal bdec = new BigDecimal(serviceTagValue);
batteryFromDb.setServiceTag(bdec.toBigInteger());