插入失败时出现约束错误

Posted

技术标签:

【中文标题】插入失败时出现约束错误【英文标题】:Getting the constrain error when an insertion fails 【发布时间】:2012-07-18 18:01:24 【问题描述】:

我正在播放媒体ContentProvider 向其中添加 mp3。

代码是这样的:

// LOOP1_PATH: /mnt/sdcard/60AH/hack043/loop1.mp3

ContentValues values = new ContentValues(5);
values.put(Media.ARTIST, "android");
values.put(Media.ALBUM, "60AH");
values.put(Media.TITLE, "hack043");
values.put(Media.MIME_TYPE, "audio/mp3");
values.put(Media.DATA, LOOP1_PATH);

getContentResolver().insert(Media.EXTERNAL_CONTENT_URI, values);

如果您运行此代码,它就可以工作。如果您尝试运行它两次,您将获得以下堆栈跟踪:

E/Database( 4102): Error inserting album_id=66 title=hack043 title_keyQQQQQ*Q*Q*Q mime_type=audio/mp3 date_added=1342706644 _display_name=loop12.mp3 sort_key=hack043 artist_id=133 _data=/mnt/sdcard/60AH/hack043/loop1.mp3
E/Database( 4102): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
E/Database( 4102):  at android.database.sqlite.SQLiteStatement.native_execute(Native Method)
E/Database( 4102):  at android.database.sqlite.SQLiteStatement.execute(SQLiteStatement.java:61)
E/Database( 4102):  at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1582)
E/Database( 4102):  at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1426)
E/Database( 4102):  at com.android.providers.media.MediaProvider.insertInternal(MediaProvider.java:2166)
E/Database( 4102):  at com.android.providers.media.MediaProvider.insert(MediaProvider.java:1984)
E/Database( 4102):  at android.content.ContentProvider$Transport.insert(ContentProvider.java:206)
E/Database( 4102):  at android.content.ContentProviderNative.onTransact(ContentProviderNative.java:146)
E/Database( 4102):  at android.os.Binder.execTransact(Binder.java:320)
E/Database( 4102):  at dalvik.system.NativeStart.run(Native Method)

不是 100% 肯定,但我猜约束失败,因为路径是 UNIQUE

我的问题是:

有没有办法获得有关约束错误的更多信息?

【问题讨论】:

API 版本缺失。您真的需要更多信息吗?我的意思是你总是可以先查询,只有在查询返回空时才插入。 【参考方案1】:

不幸的是,这是本机功能的结果。列出的代码here 被转换为错误消息。

【讨论】:

以上是关于插入失败时出现约束错误的主要内容,如果未能解决你的问题,请参考以下文章

尝试插入外键时出现错误 #1452

尝试向 MySQL 中的 table.column 添加唯一约束时出现重复条目​​错误

插入文件时出现 Azure Data Lake 错误:访问控制列表值无效

在 cellforRow 中更新约束时出现约束错误

移动父视图时出现约束错误

iOS 8 键盘扩展:出现呼叫栏时出现约束错误?