java - 如何从 SQLite 获取一行到具有自定义对象的模型?
问题描述
我正在努力从 SQLite 获得一行。
这是我的 DatabaseHelper 片段:
public Expense getExpense(long id) {
SQLiteDatabase db = this.getReadableDatabase();
Cursor cursor = db.query(EXPENSE_TABLE_NAME,
new String[]{EXPENSE_COLUMN_ID, EXPENSE_COLUMN_TYPE, EXPENSE_COLUMN_PERSON_IN_DEBT, EXPENSE_COLUMN_AMOUNT,
EXPENSE_COLUMN_DESCRIPTION, EXPENSE_COLUMN_TIMESTAMP, EXPENSE_COLUMN_IS_PAID},
EXPENSE_COLUMN_ID + "=?",
new String[]{String.valueOf(id)}, null, null, null, null);
if (cursor != null)
cursor.moveToFirst();
assert cursor != null;
Expense expense = new Expense(
cursor.getInt(cursor.getColumnIndex(EXPENSE_COLUMN_ID)),
ERROR HERE -> (ExpenseType)cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_TYPE)),
ERROR HERE -> (Person)cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_PERSON_IN_DEBT)),
cursor.getDouble(cursor.getColumnIndex(EXPENSE_COLUMN_AMOUNT)),
cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_DESCRIPTION)),
cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_TIMESTAMP)),
cursor.getInt(cursor.getColumnIndex(EXPENSE_COLUMN_IS_PAID))); // true for 1
cursor.close();
db.close();
return expense;
}
费用模型中的构造函数如下所示:
public Expense(int id, ExpenseType expenseType, Person person, Double amount, String description, String timestamp, int isPaid).
我在上面标有错误的行中遇到了转换错误
“不可转换的类型;不能将 'java.lang.String' 转换为 'com...model.ExpenseType”
我怎样才能使这项工作?在数据库中,对象expenseType
和person
作为字符串添加。
解决方案
使用这些行:
(ExpenseType)cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_TYPE)),
(Person)cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_PERSON_IN_DEBT))
您正在尝试将 2 个字符串强制转换为一个类型ExpenseType
的对象和一个类型的对象,Person
但这是无法完成的。
您没有发布类ExpenseType
and Person
,所以我不知道它们的构造函数,但是如果它们的构造函数将字符串作为参数,也许您可以这样做:
new ExpenseType(cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_TYPE))),
new Person(cursor.getString(cursor.getColumnIndex(EXPENSE_COLUMN_PERSON_IN_DEBT)))
推荐阅读
- python-3.x - Python -Google Search - 如何设置灵活的结果选择
- python - django_podcasting 迁移:TypeError:__init__() 缺少 1 个必需的位置参数:'on_delete'
- angular - 为什么使用 p-table 的 p-pagination 不起作用
- python - 为什么 CSR 格式在选择行方面优于 CSC 格式?
- spring-boot - MockMvc 没有这样的 bean 异常
- c# - 如何修复“错误 CS0029 无法将类型‘UnityEngine.Quaternion’隐式转换为‘UnityEngine.Vector3’”
- c# - 在 Task.Run 中包装 IO 绑定的异步方法
- typescript - TypeScript 中的“构造函数”、“静态”和常规接口有什么区别?
- c - 无法使用 make 正确编译
- java - 在对象中查找值时使用 ArrayList.indexOf