我正在尝试在sqlite数据库中插入一行。以下是查询:
SQLiteDatabase db = this.getWritableDatabase();
ContentValues values = new ContentValues();
values.put(KEY_MAIN_ID_PK, "NULL");
values.put(KEY_NAME, "name-1" );
long mainTblIn_id = db.insert(TABLE_MAIN, null, values);
出于某种原因,我得到-1,因为数据没有插入。我的问题是当我运行db.insert(..)时,如何查看正在执行的查询。如果我得到原始查询,那么我想修复错误变得容易。
答案 0 :(得分:0)
出于某种原因,Android的数据库API认为最好以静默方式抛出错误消息(但仅适用于insert()
)。
改为使用insertOrThrow()
。
答案 1 :(得分:0)
我建议您的错误归因于values.put(KEY_MAIN_ID_PK, "NULL");
基本上,假设KEY_MAIN_ID_PK
定义为INTEGER PRIMARY KEY
或INTEGER PRIMARY KEY AUTOINCREMENT
,尝试将字符串 NULL (不是null)插入到列中必须特别具有整数(即该列是rowid的别名,根据: -
在SQLite中,类型为INTEGER PRIMARY KEY的列是其中的别名 ROWID(除非在WITHOUT ROWID表中),它总是64位签名 整数。 SQLite Autoincrement
我建议使用: -
ContentValues values = new ContentValues();
// values.put(KEY_MAIN_ID_PK, "NULL"); <<<< COMMENTED OUT HERE BUT DELETE
values.put(KEY_NAME, "name-1" );
我相信以下内容也适用: -
ContentValues values = new ContentValues();
values.put(KEY_MAIN_ID_PK, null); //<<<< use null rather than string NULL
values.put(KEY_NAME, "name-1" );