我正在关注此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)我确实需要吗?
答案 0 :(得分:1)
INTEGER PRIMARY KEY AUTOINCREMENT是什么意思?
INTEGER PRIMARY KEY AUTOINCREMENT意味着变量(在本教程中,变量“id”)是整数(自然数)的类型,它是数据库中的主键(这意味着它是唯一标识符)数据库中的数据),并且无论何时在数据库中添加一些行,都会自动增量。
1)我无法理解该ID的工作原理? KEY_ID =什么?意思?
ID是数据库中行的唯一标识符,您需要此值才能在数据库中正确访问数据。教程中数据库的示例:
id title author
1 book1 author1
2 book2 author2
3 book2 author1
这不是数据库中第三行的错误,id
是唯一的(每行都不同,因为它是主键)但其余的可以重复(“author1”和“ book2“是数据库中的重复值”。 KEY_ID
只是MySQLiteHelper
类中定义的全局变量,它记住列id
,因此,如果我们将数据库中的id
列更改为,例如{ {1}},然后在代码中使用该列,我们只需要将identifier
替换为String KEY_ID = "id"
,我们都已设置完毕。 String KEY_ID = "identifier"
只会根据提供的KEY_ID=?
动态选择要更新的行(id
)
2)如何递增和
book.getId()
表示数据库中的KEY_ID
列,并且由于id
设置为id
,因此无论何时在数据库中添加行,{ {1}}值将递增(请注意AUTOINCREMENT
只是表示数据库中id
列的字符串,因此它不会递增(不能递增单词)。)
3)它有什么初始值 - 0或1?
数据库中KEY_ID
的初始值设置为1.
4)我确实需要吗?
那么,识别数据库中行的最佳方法是使用ids(教程中的变量id
),并将“id”设为id
,确保存在将不会有重复的值,并且在搜索数据库中的数据时将使用“id”值。当然,您不必使用它(在教程示例中,您必须),但如果您能以某种方式为数据库行找到另一个唯一标识符,那么我猜id
是不必要的。
希望这能澄清一些事情......
答案 1 :(得分:0)
update
方法的第3和第4个参数定义where
子句。我假设KEY_ID
是一个有价值的常数" id" (正如提醒Android中的主键被命名为" _id"通常)。问号(?)是您想要提供给where子句的任何动态值的占位符。然后通过方法的第4个参数提供这些值。最后,您将拥有一个带有where子句的SQL查询,如下所示:WHERE id = book.getId()
(book.getId()将被评估,而不是用作字符串)。查看SQLiteDatabase文档 - 您将注意到所有CRUD操作都支持这种提供选择语句和选择参数的方式。
答案 2 :(得分:0)
1)ID是SQL行的唯一标识符。 在SQL请求中,“?”是一个参数。所以在你的情况下,“?”将由您的选择args重新进行。
2)在 onCreate()方法中,“id INTEGER PRIMARY KEY AUTOINCREMENT”表示当您插入新行时,ID会自动递增,建议您使用此方法我需要管理它。
3)初始值为1.
4)是的,你需要它!
答案 3 :(得分:-1)
初始值为1,您可以更改任何起始ID。 当您将新行插入数据库时,它会自动增加。