如何使用db.insert语句检查正在执行的查询

时间:2018-02-27 17:33:57

标签: android sqlite

我正在尝试在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(..)时,如何查看正在执行的查询。如果我得到原始查询,那么我想修复错误变得容易。

2 个答案:

答案 0 :(得分:0)

出于某种原因,Android的数据库API认为最好以静默方式抛出错误消息(但仅适用于insert())。

改为使用insertOrThrow()

答案 1 :(得分:0)

请注意,不是直接答案,而是对潜在问题的回答。

我建议您的错误归因于values.put(KEY_MAIN_ID_PK, "NULL");

基本上,假设KEY_MAIN_ID_PK定义为INTEGER PRIMARY KEYINTEGER 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" );