2012-05-29 148 views
2

我試圖找出這一點,但一段時間,但我似乎無法找到解決方案。我有一個爲創建一個表:FMDB插入自動增量

[db executeUpdate:@"CREATE TABLE 'MEDIA' (identifier INTEGER PRIMARY KEY AUTOINCREMENT, taskIdentifier INTEGER, type INTEGER, data BLOB)"] 

我怎麼插入一條記錄到這個表?我嘗試這樣做:

[db executeUpdate:@"INSERT INTO 'MEDIA' VALUES($next_id,?,?,?)" withArgumentsInArray:arguments]; 

而參數是一個NSArray與4個值,第一個是一個虛擬的值(因爲它應該自動增量本身),但沒有用。這應該如何與FMDB一起工作?

回答

5

你需要問自己,你是否真的想擁有AUTOINCREMENT關鍵詞。 AUTOINCREMENT與INTEGER PRIMARY KEY一起帶來非常具體的行爲,其描述爲here。很可能你不需要它,在這種情況下,只需將INTEGER PRIMARY KEY留在列定義中。 現在,定義爲INTEGER PRIMARY KEY列真正成爲ROWID的別名,所以你有兩個選擇:

  • 省略在INSERT語句此列的值。這將自動插入下一個可用值。從文檔: The usual algorithm is to give the newly created row a ROWID that is one larger than the largest ROWID in the table prior to the insert.所以你的INSERT應該是這樣的:[db executeUpdate:@"INSERT INTO 'MEDIA' VALUES(?,?,?)" withArgumentsInArray:arguments];不過參數數組將只包含taskIdentifier數據 3倍的值。

  • 標識符提供值列是這樣的:[db executeUpdate:@"INSERT INTO 'MEDIA' VALUES(?,?,?,?)" withArgumentsInArray:arguments];與含有識別符作爲的NSNumber上索引參數數組0