Как я могу сохранить значение BigDecimal (Java) в столбце Real (SQlite)?
У меня все еще большие проблемы с BigDecimal (слезы началисьВоти продолжалВот до сих пор.
Теперь у меня есть противоположная проблема - переход от BigDecimal в POJO к REAL в таблице SQLite.
POJO определяется как:
public class DeliveryItem {
private int _id;
private String _invoiceNumber;
private String _UPC_PLU;
private String _vendorItemId;
private int _packSize;
private String _description;
private BigDecimal _cost;
private BigDecimal _margin;
private BigDecimal _listPrice;
private int _departmentNumber;
private String _subdepartment;
private String _quantity;
public void setID(int id) {
this._id = id;
}
. . .
Этот код пытается получить данные в форме, чтобы их можно было разместить в таблице SQLite (где соответствующие столбцы имеют тип данных REAL, единственный тип данных SQLite real / float):
public long addDeliveryItem(DeliveryItem delItem) {
long IdAdded = 0;
ContentValues values = new ContentValues();
values.put(COLUMN_INVOICENUM, delItem.get_invoiceNumber());
values.put(COLUMN_UPCPLU, delItem.get_UPC_PLU());
values.put(COLUMN_VENDORITEMID, delItem.get_vendorItemId());
values.put(COLUMN_PACKSIZE, delItem.get_packSize());
values.put(COLUMN_DESCRIPTION, delItem.get_description());
//values.put(COLUMN_COST, delItem.get_cost());
//values.put(COLUMN_COST, new BigDecimal(delItem.get_cost()));
values.put(COLUMN_COST, (Double) delItem.get_cost());
values.put(COLUMN_MARGIN, delItem.get_margin());
values.put(COLUMN_LISTPRICE, delItem.get_listPrice());
values.put(COLUMN_DEPTNUM, delItem.get_departmentNumber());
values.put(COLUMN_SUBDEPT, delItem.get_subdepartment());
values.put(COLUMN_QTY, delItem.get_quantity());
SQLiteDatabase db = this.getWritableDatabase();
if (db != null) {
IdAdded = db.insert(TABLE_DELIVERYITEMS, null, values);
}
if (db != null) {
db.close();
}
return IdAdded;
}
Для строки COLUMN_COST выше (столбцы «MARGIN» и «LISTPRICE» имеют одинаковую проблему), я получаю: «ошибка: несовместимые типы: BigDecimal не может быть преобразован в Double«Когда я пытаюсь это:
values.put(COLUMN_COST, (Double) delItem.get_cost());
... и для закомментированного кода (обе строки), а именно:
values.put(COLUMN_COST, delItem.get_cost());
...и это:
values.put(COLUMN_COST, new BigDecimal(delItem.get_cost()));
...Я получил, "ошибка: не найден подходящий метод для метода put (String, BigDecimal) ContentValues.put (String, String) не применим (несоответствие аргумента; BigDecimal не может быть преобразован в String) метод ContentValues.put (String, Byte) не применим (аргумент рассогласование; BigDecimal не может быть преобразован в байт) метод ContentValues.put (String, Short) не применим (несоответствие аргумента; BigDecimal не может быть преобразован в Short) метод ContentValues.put (String, Integer) не применим (несоответствие аргумента; BigDecimal не может быть преобразованным в целое число) метод ContentValues.put (String, Long) не применим (несоответствие аргумента; BigDecimal не может быть преобразовано в Long) метод ContentValues.put (String, Float) не применим (несоответствие аргумента; BigDecimal не может быть преобразован в Float ) метод ContentValues.put (String, Double) не применим (несоответствие аргумента; BigDecimal не может быть преобразован в Double) метод ContentValues.put (String, Boolean) не применим (несоответствие аргумента; BigDecimal не может быть преобразован t o Boolean) метод ContentValues.put (String, byte []) не применим (несоответствие аргумента; BigDecimal не может быть преобразован в byte [])"
Итак, как я могу манипулировать значением BigDecimal, чтобы оно было принято экземпляром ContentValues?
ОБНОВИТЬВозможно, мне придется временно выдумать это, просто проигнорировав эти значения и изменив DDL на:
//+ COLUMN_COST + " REAL," + COLUMN_MARGIN + " REAL," + COLUMN_LISTPRICE + " REAL,"
+ COLUMN_COST + " REAL DEFAULT 0," + COLUMN_MARGIN + " REAL DEFAULT 0," + COLUMN_LISTPRICE + " REAL DEFAULT 0,"