2011-04-12 64 views
0

我對我的SQLite下表。約束失敗 - SQLite的3 - 安卓

StringBuilder createSql = new StringBuilder(); 
    createSql.append("create table LIBRARY ("); 
    createSql.append("id integer primary key, "); 
    createSql.append("title text, "); 
    createSql.append("author text, "); 
    createSql.append("publisher text, "); 
    createSql.append("thumbnailUrl text, "); 
    createSql.append("formatType text, "); 
    createSql.append("contentUrl text, "); 
    createSql.append("publicationType text, "); 
    createSql.append("favorite text, "); 
    createSql.append("started text, "); 
    createSql.append("normalizedTitle text, "); 
    createSql.append("downloaded integer, "); 
    createSql.append("wasDownloaded text "); 
    createSql.append(");"); 

並且下面的代碼在該表中嵌入一個值。

public void addLibrary(LibraryItem item) { 
    ContentValues row = new ContentValues(); 
    row.put("title", item.getTitle()); 
    row.put("author", item.getAuthor()); 
    row.put("publisher", item.getPublisher()); 
    row.put("thumbnailUrl", item.getThumbnail()); 
    row.put("formatType", item.getFormat()); 
    row.put("contentUrl", item.getContentUrl()); 
    row.put("publicationType", item.getPublicationType()); 
    row.put("favorite", item.isFavorite() ? "YES" : "NO"); 
    row.put("id", item.getItemId()); 
    row.put("normalizedTitle", StringUtil.normalize(item.getTitle())); 
    row.put("downloaded", Calendar.getInstance().getTimeInMillis()); 
    row.put("wasdownloaded", item.hasContent() ? "YES" : "NO"); 

    long id = db.insert("LIBRARY", null, row); 
    add(id, item.getCategories()); 
} 

執行時,它可是,我有以下錯誤。

Error inserting id=255 formatType=null author=null title=A Cabana contentUrl=/sdcard/Digital Editions/A Cabana.pdf publicationType=Livro thumbnailUrl=https://api-dls.homolog.abrildigital.com.br/images/22/android_cover_201103092041.jpg wasdownloaded=NO downloaded=1302631109426 normalizedTitle=A Cabana favorite=NO publisher=null 
android.database.sqlite.SQLiteConstraintException: error code 19: constraint failed 

怎麼了?

回答

3

你的主鍵是不會自動遞增。然後,您插入第一行是得到了一個鍵,然後你插入另一個是得到了相同的一個,但主鍵不能是一樣的!

然後你將與指定鍵的項目,我認爲錯誤的意思項與此鍵已經存在。

+0

HMM ..現在我明白我的問題了,謝謝。 – 2011-04-12 18:16:10

1

更改createSQL生成器來......

createSql.append("id integer primary key autoincrement, "); 

也。當你插入時,你不要設置id字段。相反,你應該做的,就是在函數的頂部做一次檢查。

if(item.getItemID() == 0) 
{ 
    //Run update here instead. 
    //Set the id on the ContentValues here 
} 
else 
{ 
    //Run insert statement instead. 
    //Don't set the id in the ContentValues here. 
} 
+0

是啊,這是我的問題,我打電話了兩次。我需要第二個更新。但我不需要自動增量鍵。 – 2011-04-12 18:49:19