我有一个 DatabaseHelper
类,它可以构建我的所有表并处理查询等。
但是,有一件事难倒了我。
我有一个包含以下列的 list
表:
checklist_id, int, primary key
start_time, text
end_time, text
这是我的“insertChecklist()”方法,它将在表中插入一行:
public long insertChecklist(Checklist checklist){
// Get reference of the ChecklistDB database
SQLiteDatabase db = this.getWritableDatabase();
// Make values to be inserted
ContentValues values = new ContentValues();
values.put(ChecklistContract._ID, checklist.getId());
values.put(ChecklistContract.COLUMN_NAME_START_TIME, checklist.getStartTime());
values.put(ChecklistContract.COLUMN_NAME_END_TIME, checklist.getEndTime());
// Insert the new row, returning the primary key value of the new row
long newRowId;
newRowId = db.insert(
ChecklistContract.TABLE_NAME,
null, //COLUMN_NAME_NULLABLE (set to null to not insert new row where there are no values)
values);
// close database transaction
db.close();
return newRowId;
}
所以我按如下方式使用这个函数:
- 我创建一个
Checklist
对象 - 我将其传递到我的
insertChecklist()
方法
但是,我如何知道如何在我的 Checklist 对象中创建 id?
Checklist checklist = new Checklist(id??, startTime, endTime);
// the "id" needs to be the equal to the last id in the table, plus 1
insertChecklist(checklist);
有没有人有 SQLite 数据库的经验可以帮助我解决这个问题?我这样做是错误的吗?
最佳答案
insert()
函数返回新行的 rowid
。
如果您的表有 autoincrementing ID ,即 INTEGER PRIMARY KEY 或 INTEGER PRIMARY KEY AUTOINCRMENT 列,那么这与 rowid
相同。
在这种情况下,要自动分配新值,请不要将任何 ID 值放入 ContentValues
中,并将对象的 ID 设置为插入()
:
public void insertChecklist(Checklist checklist) {
SQLiteDatabase db = this.getWritableDatabase();
try {
ContentValues values = new ContentValues();
values.put(ChecklistContract.COLUMN_NAME_START_TIME, checklist.getStartTime());
values.put(ChecklistContract.COLUMN_NAME_END_TIME, checklist.getEndTime());
long id;
id = db.insertOrThrow(ChecklistContract.TABLE_NAME, null, values);
checklist.setId(id);
} finally {
db.close();
}
}
关于java - 如何将我的第一行和后续行插入到我的 Android 项目数据库中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35168598/