我已经搜索了堆栈溢出,但找不到解决方案。 这是我的 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/