【问题标题】:SQLiteConstraintException on inserting values in table在表中插入值时出现 SQLiteConstraintException
【发布时间】:2011-08-21 20:35:02
【问题描述】:

我是 android 开发新手,我有一个带有以下代码的 android 数据库表

公共类 SoftCopyDatabase 扩展 SQLiteOpenHelper {

private static final String DATABASE_NAME = "SoftCopy.db";
private static final int DATABASE_VERSION = 1;

public SoftCopyDatabase(Context ctx) {
    super(ctx, DATABASE_NAME, null, DATABASE_VERSION);
}

@Override
public void onCreate(SQLiteDatabase db) {
    db.execSQL("CREATE TABLE " + TABLE_NAME + " (" + _ID
            + " INTEGER PRIMARY KEY AUTOINCREMENT, " + SUBJECT
            + " TEXT NOT NULL," + TOPIC + " TEXT NOT NULL, "
            + LECTURENUMBER + " TEXT NOT NULL, " + PAGENUMBER
            + " TEXT NOT NULL, " + DATE + " TEXT NOT NULL, " + _DATA
            + " TEXT NOT NULL);");
}

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
    onCreate(db);
}} 

我正在尝试使用addInfo()方法添加到这个表中,如下:

private void addInfo(){
    ContentValues values = new ContentValues();
    values.put(SUBJECT, SaveData._subject);
    values.put(TOPIC, SaveData._topic);
    values.put(LECTURENUMBER, SaveData._lecturenumber);
    values.put(PAGENUMBER, Integer.toString(PAGE_NUMBER));
    values.put(DATE, SaveData._date);
    values.put(_DATA, SaveData.FILE_NAME + ".png");
    softCopyDB.getWritableDatabase().insertOrThrow(TABLE_NAME, null, values);

}

但是当我增加 PAGE_NUMBER 的值(Page_NUMBER 是一个整数)同时保持所有其他条目相同并调用 addInfo() 时,我在 softCopyDB.getWritableDatabase().insertOrThrow(TABLE_NAME, null, values);

如下

08-21 18:16:11.216: ERROR/AndroidRuntime(329): Caused by: android.database.sqlite.SQLiteConstraintException: error code 19: 约束失败 08-21 18:16:11.216:错误/AndroidRuntime(329):在 android.database.sqlite.SQLiteStatement.native_execute(本机方法) 08-21 18:16:11.216: 错误/AndroidRuntime(329): 在 android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:55) 08-21 18:16:11.216: 错误/AndroidRuntime(329): 在 android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1549) 08-21 18:16:11.216: 错误/AndroidRuntime(329): 在 android.database.sqlite.SQLiteDatabase.insertOrThrow(SQLiteDatabase.java:1432) 08-21 18:16:11.216: 错误/AndroidRuntime(329): at neduet.telecom.softcopy.surface.LectureNoting.addInfo(LectureNoting.java:161)

请帮我整理一下。

【问题讨论】:

    标签: android


    【解决方案1】:

    我能看到的唯一限制是 PK 而不是 NULL。由于 _ID 不是您插入的一部分,我会检查您的文本值是否为空。

    【讨论】:

    • 请详细说明您的答案。
    • 你所有的列都标记为NOT NULL,所以检查values对象中的所有对象都不为空。
    猜你喜欢
    • 1970-01-01
    • 2014-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-04
    • 2017-01-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多