java - 如何将我的第一行和后续行插入到我的 Android 项目数据库中

标签 java android database sqlite

我有一个 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;
    }

所以我按如下方式使用这个函数:

  1. 我创建一个 Checklist 对象
  2. 我将其传递到我的 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/

相关文章:

java - 如何使用eclipse生成surefire-report.html

java - 我正在使用 Live sdk 将文件上传到 One Drive,并收到来自 google 的警报 :

android - 在 Android 中提交 HTML5 表单时,键盘中的下一个按钮不会出现

mysql - 如何创建触发器来连接字段

php - 保持 WordPress(本地和远程)同步

java - 如何从java代码生成系统架构?

java - 如何解析无效(错误/格式不正确)的 XML?

java - 寻找 Hook Xposed 模块的方法

java - 检索触发器生成的主键 (Java)

java - lambda 复制具有不同键类型的映射