Android - SQLite AUTOINCRMENT 不增加主键

标签 android sqlite auto-increment

我已经搜索了堆栈溢出,但找不到解决方案。 这是我的 SQLite onCreate 代码。

public void onCreate(SQLiteDatabase database) {
    String query = "CREATE TABLE cards (cardID INTEGER PRIMARY KEY AUTOINCREMENT, question VARCHAR, answer VARCHAR, subject VARCHAR)";
    database.execSQL(query);
}

我用它从适配器(DbTools)插入

public void insertCard(HashMap<String, String> queryValues) {

    SQLiteDatabase database = this.getWritableDatabase();
    ContentValues values = new ContentValues();
    values.put("question", queryValues.get("question"));
    values.put("answer", queryValues.get("answer"));
    values.put("subject", queryValues.get("subject"));

    database.insert("cards", null, values);
    database.close();

}

这就是我将数据插入数据库的方式。

HashMap<String, String> Values = new HashMap<String, String>(); 
Values.put("question", newQuestion);
Values.put("answer", newAnswer);
Values.put("subject", newSubject);
dbTools.insertCard(Values);

其中 newQuestion、newAnswer 和 newSubject 是定义来自编辑文本字段的用户输入的变量。

当我通过调用 toast 检查数据库时,除了插入为 Null 的 cardID 之外,所有内容都已插入。 怀疑我的toast检查,我下载了一个数据库查看器,也发现cardID为空。

有什么建议吗?

最佳答案

cardID INTEGER PRIMARY KEY AUTOINCRMENT替换为cardID INTEGER PRIMARY KEY

public void onCreate(SQLiteDatabase database) {
    String query = "CREATE TABLE cards (cardID INTEGER PRIMARY KEY, question VARCHAR, answer VARCHAR, subject VARCHAR)";
    database.execSQL(query);
}

您不必像在 SQLite 中那样专门编写 AUTO_INCRMENT

只需将主键字段定义为_id INTEGER PRIMARY KEY

关于Android - SQLite AUTOINCRMENT 不增加主键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21643715/

相关文章:

php - MySQL修复两个表中的自动增量差距

android - 如何检测NFC芯片的类型

Android原生联系人修改

python - 使用 Python 进行 SQLite 查询

Python SQLite3插入没有返回错误但表中没有数据

c++ - PostgreSQL主键自增在C++中崩溃

使用 Golang mongo-driver 的 MongoDB 自动增量 ID

java - Android:我不明白:static { foo();}

android - 在 contactList 中检测新的联系人添加

sqlite - 将两个sql查询合并为一个分组