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

时间:2015-02-27 14:35:06

标签: java android mysql android-sqlite

我正在关注此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)我确实需要吗?

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。 当您将新行插入数据库时​​,它会自动增加。