谁能解释一下为什么 SQLite 数据库需要这个 KEY_ID?

Can anyone explain me why is this KEY_ID needed in SQLite Database?

我正在关注这个 tutorial

onCreate():INTEGER PRIMARY KEY AUTOINCREMENT 是什么意思?

我可以推断它是主键并且是自动递增的。

public void onCreate(SQLiteDatabase db) {
    // SQL statement to create book table
    String CREATE_BOOK_TABLE = "CREATE TABLE books ( " +
            "id INTEGER PRIMARY KEY AUTOINCREMENT, " + 
            "title TEXT, "+
            "author TEXT )";

    // create books table
    db.execSQL(CREATE_BOOK_TABLE);
}

然后在 update() 中:

 db.update(TABLE_BOOKS, //table
            values, // column/value
            KEY_ID+" = ?", // selections
            new String[] { String.valueOf(book.getId()) }); //selection args

1) 我无法理解该 ID 的工作原理? KEY_ID= 是什么?意思是?

2) 它是如何递增的以及

3) 它有什么初始值 - 0 还是 1?

4) 我真的需要它吗?

初始值为1,您可以更改您的起始id。 当您将新行插入数据库时​​它会自动增加。

update 方法的第三个和第四个参数定义了 where 子句。我假设 KEY_ID 是一个值为 "id" 的常量(就像 Android 中的提醒主键通常被命名为“_id”一样)。问号 (?) 是您要提供给 where 子句的任何动态值的占位符。这些值然后由该方法的第四个参数提供。最后,您将得到一个带有 where 子句的 SQL 查询,如下所示:WHERE id = book.getId()(book.getId() 将被评估,而不是用作字符串)。查看 SQLiteDatabase 文档 - 您会注意到所有 CRUD 操作都支持这种提供选择语句和选择参数的方式。

1) ID 是 SQL 行的唯一标识符。 在 SQL 请求中,“?”是一个参数。所以在你的情况下,“?”将被您选择的参数替换。

2) 在你的onCreate()方法中,"id INTEGER PRIMARY KEY AUTOINCREMENT"表示插入新行时id会自动递增,推荐使用此方法,因为你不需要管理它。

3)初始值为1。

4) 是的,你需要它!

What does that INTEGER PRIMARY KEY AUTOINCREMENT mean?

INTEGER PRIMARY KEY AUTOINCREMENT 表示变量(在本教程中,变量"id")是整数(自然数)类型,它是你数据库中的主键(也就是说它是数据库中数据的唯一标识符)并且每当您在数据库中添加一些行时它都会自动递增。

1) I cannot understand how that ID works? What does KEY_ID=? mean?

ID 是数据库中行的唯一标识符,您需要此值才能正确访问数据库中的数据。教程中的数据库示例:

id    title    author
 1    book1    author1
 2    book2    author2
 3    book2    author1

这不是数据库中第三行的错误,id是唯一的(每一行都不同,因为它是主键)但其余的可以重复("author1" 和 "book2" 是数据库中的重复值)。 KEY_ID 只是在 MySQLiteHelper class 中定义的全局变量,它会记住列 id,因此如果我们将数据库中的 id 列更改为,例如,identifier,然后要在代码中使用该列,我们只需将 String KEY_ID = "id" 替换为 String KEY_ID = "identifier" 即可。 KEY_ID=? 将根据提供的 id 动态选择要更新的行(由 book.getId()

2) How it is incremented and

KEY_ID 表示数据库中的 id 列,并且由于 id 它被设置为 AUTOINCREMENT ,每当您在数据库中添加一行时, id 值将递增(请注意,KEY_ID 只是表示数据库中 id 列的字符串,因此它不会递增(不能递增单词))。

3) what initial value does it have - 0 or 1?

数据库中id的初始值设置为1。

4) Do I need it for sure?

嗯,识别数据库中行的最佳方法是使用 id(教程中的变量 id),并将 "id" 设为 PRIMARY KEY您确保它不会有重复值,并且在数据库中搜索数据时将使用 "id" 值。当然,您不必使用它(在教程示例中,您必须使用它),但是如果您能以某种方式为您的数据库行找到另一个唯一标识符,那么我想 id 是不必要的。

希望这能澄清一些事情...