我在將數據插入表中時遇到了問題。所以這就是我正在做的。我將一張音樂專輯添加到收藏夾表格中,並將該專輯的歌曲添加到另一張名爲「歌曲」的表格中。所以,我得到這個從logcat的:插入數據庫約束失敗
04-08 13:19:58.846: E/SQLiteDatabase(6120): Error inserting album_id=1 mp4= mp3=http://nelu.burduja.com/musica/songs_with/with_515c34d1bbde7.mp3 title=Super hit artist=Gherghe Topa thumb=snwith_515c34d1aeee1.jpeg
04-08 13:19:58.846: E/SQLiteDatabase(6120): android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed
04-08 13:19:58.846: E/SQLiteDatabase(6120): at android.database.sqlite.SQLiteStatement.native_executeInsert(Native Method)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at android.database.sqlite.SQLiteStatement.executeInsert(SQLiteStatement.java:113)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at android.database.sqlite.SQLiteDatabase.insertWithOnConflict(SQLiteDatabase.java:1718)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at android.database.sqlite.SQLiteDatabase.insert(SQLiteDatabase.java:1591)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at com.myapp.functions.DatabaseHelper.addSongs(DatabaseHelper.java:179)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at com.myapp.functions.DatabaseHelper.addFavorite(DatabaseHelper.java:215)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at com.myapp.functions.AlbumLazyAdapter$1.onClick(AlbumLazyAdapter.java:94)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at android.view.View.performClick(View.java:3511)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at android.view.View$PerformClick.run(View.java:14105)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at android.os.Handler.handleCallback(Handler.java:605)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at android.os.Handler.dispatchMessage(Handler.java:92)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at android.os.Looper.loop(Looper.java:137)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at android.app.ActivityThread.main(ActivityThread.java:4440)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at java.lang.reflect.Method.invokeNative(Native Method)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at java.lang.reflect.Method.invoke(Method.java:511)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:787)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:554)
04-08 13:19:58.846: E/SQLiteDatabase(6120): at dalvik.system.NativeStart.main(Native Method)
首先我插入一張專輯:
public void addSongs(ArrayList<Songs> arrayList, String albumID) {
ContentValues values = new ContentValues();
for (int i = 0; i < arrayList.size(); i++) {
values.put("title", arrayList.get(i).getSONG_TITLE());
values.put("artist", arrayList.get(i).getSONG_ARTIST());
values.put("mp3", arrayList.get(i).getSONG_MP3());
values.put("mp4", arrayList.get(i).getSONG_MP4());
values.put("thumb", arrayList.get(i).getSONG_THUMB());
values.put("album_id", albumID);
database.insert("songs", null, values);
}
}
最後我的表查詢:
public void addFavorite(Albums album) {
ContentValues values = new ContentValues();
values.put(ALB_GENRE, album.getTAG_GENRE());
values.put(ALB_ID, album.getTAG_ID());
values.put(ALB_MIX, album.getTAG_MIX());
values.put(ALB_NAME, album.getTAG_NAME());
values.put(ALB_SINGER, album.getTAG_SINGER());
values.put(ALB_THUMB, album.getTAG_THUMB());
// Inserting Row
addSongs(album.getSongs(), album.getTAG_ID());
database.insert(TABLE_FAVORITES, null, values);
}
然後我通過插入從專輯歌曲
private static final String DATABASE_CREATE_SONGS = "create table "
+ TABLE_SONGS + "(title text "
+ ", artist text, mp3 text, mp4 text, thumb text,"
+ " album_id text REFERENCES " + TABLE_FAVORITES + "(id));";
private static final String DATABASE_CREATE = "create table "
+ TABLE_FAVORITES + "(" + ALB_ID + " text primary key, " + ALB_NAME
+ " text, " + ALB_SINGER + " text, " + ALB_GENRE + " text, "
+ ALB_MIX + " text, " + ALB_THUMB + " text" + ");";
那麼可以嗎anybod喲幫助我!?
什麼ALB_ID的值是多少? – laalto 2013-04-08 11:35:05
@laalto calue的ALB_ID是1 – 2013-04-08 11:36:44
在你的數據庫中,你使用的是兩種類型的約束,第一種是表_properties,ALB_ID是主鍵,TABLE_SONGS,album_id是外鍵,所以Alb_id始終是唯一的ant not null,來自父表的album_id引用檢查album_id是否可用父表中 – sri 2013-04-08 11:36:53