0

我正在制作一个应用程序,我需要在其中保存一些值sqlitedatabase,为此我编写了这个函数

public long saveMood(Mood mood) {
        openDatabase();
        ContentValues cv = new ContentValues();
        cv.put(COL_ACTIVE, (mood.isActive() ? 1 : 0));
        cv.put(COL_BLOCK_CALL, (mood.isBlockCall() ? 1 : 0));
        cv.put(COL_BLOCK_CALL, (mood.isBlockCall() ? 1 : 0));
        cv.put(COL_BLOCK_SMS, (mood.isBlockSms() ? 1 : 0));
        cv.put(COL_SILENT, (mood.isSilent() ? 1 : 0));
        cv.put(COL_VIBRATE, (mood.isVibrate() ? 1 : 0));
        cv.put(COL_WIFI, (mood.isWifiOn() ? 1 : 0));
        cv.put(COL_TIME, mood.getTime());
        cv.put(COL_NAME, mood.getName());
        cv.put(COL_VOLUME, mood.getRingVolumn());
        long id = database.insert(TABLE_NAME, null, cv);
        closeDatabase();
        return id;
    }

我用来创建表的查询是这个

private static final String CREATE_TABLE_QUERY = "CREATE TABLE " + TABLE_NAME 
                    + "("
                    + COL_ID + " INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, " 
                    + COL_NAME + " TEXT NOT NULL, " 
                    + COL_ACTIVE + " INTEGER NOT NULL, "
                    + COL_BLOCK_CALL + " INTEGER NOT NULL, "
                    + COL_BLOCK_SMS + " INTEGER NOT NULL, "
                    + COL_BRIGHT + " INTEGER NOT NULL, "
                    + COL_SILENT + " INTEGER NOT NULL, "
                    + COL_TIME + " LONG NOT NULL, "
                    + COL_VIBRATE + " INTEGER NOT NULL, "
                    + COL_VOLUME + " INTEGER NOT NULL, "
                    + COL_WIFI + " INTEGER NOT NULL "
                    + " ); ";

但是每次插入 id = -1 时我都会遇到此异常

 Error inserting silent=1 call_block=1 time=0 wifi=0 name=night volume=0 sms_block=1 vibrate=0 active=0
08-19 11:09:05.790: E/Database(6648):   at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1658)
08-19 11:09:05.790: E/Database(6648):   at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1519)

请帮帮我!

4

3 回答 3

1

所有列都有一个not null约束。但是错误日志显示:

silent=1 call_block=1 time=0 wifi=0 name=night volume=0 sms_block=1 vibrate=0 active=0

这意味着,缺少volumebright的值,SQLite 不会接受此插入,因为表要求所有记录值都不为空。

于 2013-08-19T06:43:01.303 回答
0

这里似乎没什么问题

第一的

COL_BRIGHT + " INTEGER NOT NULL,"

is NOT NULL 但您没有在saveMood方法中为此提供值。所以这就是原因Conflict

解决方案

提供值COL_BRIGHT或删除 NOT NULL

第二

这似乎是重复的行

cv.put(COL_BLOCK_CALL, (mood.isBlockCall() ? 1 : 0));
cv.put(COL_BLOCK_CALL, (mood.isBlockCall() ? 1 : 0));

解决方案

删除重复的行

于 2013-08-19T06:34:24.640 回答
0

您需要在 Create Query 的主键中删除 NOT NULL 关键字,因为具有自动增量的主键在任何情况下都不会为空,否则使用 insertWithOnConflict() 方法而不是 insert() 方法

于 2013-08-19T06:35:07.750 回答