谁能解释一下为什么 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
是不必要的。
希望这能澄清一些事情...
我正在关注这个 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
是不必要的。
希望这能澄清一些事情...