2015-06-02 2 views
0

Это последний введенный метод, который возвращает мне последний id.Последний вставленный идентификатор строки в базу данных успешно вставлен, но для получения этого идентификатора 0?

Код:

-(int)LastId { 
    int noteID; 

    NSString * sqlStr; 

    sqlStr = [NSString stringWithFormat:@"select * from notes"]; 

    sqlite3_stmt *ReturnStatement = (sqlite3_stmt *) [self getStatement: sqlStr]; 

    while(sqlite3_step(ReturnStatement) == SQLITE_ROW){ 

     @try{ 
      noteID=[[NSString stringWithUTF8String:(char *)sqlite3_column_text(ReturnStatement, 0)] intValue]; 
     } @catch (NSException *ept) { 
      NSLog(@"Exception in Method: '%@', Reason: %@", @"loadData", [ept reason]); 
     } 
    } 

    return noteID; 
} 

Это метод, который я вставил последний обратный идентификатор

-(void)AddNoteImages1:(NSString *)imageName1 andID:(int)notesID{ 
    notesID = [self LastId]; 

    NSString *query = [NSString stringWithFormat:@"insert into image1(image1Name,notes_id) values('%@','%d')",imageName1,notesID]; 

    [self InsUpdateDelData:query]; 
} 

Это метод, который я хочу, чтобы получить последнюю вставленную строку идентификатора

-(NSMutableArray *)loadImages1:(int)note_ID{ 
    NSMutableArray *dataArray =[[NSMutableArray alloc] init]; 

    NSString * sqlStr = [NSString stringWithFormat:@"SELECT * FROM image1 WHERE notes_id = %d",note_ID]; 

    sqlite3_stmt *ReturnStatement = (sqlite3_stmt *) [self getStatement: sqlStr]; 

    while(sqlite3_step(ReturnStatement) == SQLITE_ROW){ 

     @try{ 
      image1DC *imageData = [[image1DC alloc] init]; 
      imageData.image1ID = [[NSString stringWithUTF8String:(char *)sqlite3_column_text(ReturnStatement, 0)] intValue]; 

      imageData.image1Name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(ReturnStatement, 1)]; 

      [dataArray addObject:imageData]; 
     } @catch (NSException *ept) { 
      NSLog(@"Exception in %s, Reason: %@", __PRETTY_FUNCTION__, [ept reason]); 
     } 
    } 

    return dataArray; 
} 

ответ

2

LastId функция только ste ps через все строки в таблице без какого-либо определенного порядка; он вернет некоторый случайный идентификатор.

Чтобы получить последний идентификатор, вставленный в одно соединение с базой данных, вызовите функцию sqlite3_last_insert_rowid().

Чтобы получить ID с наибольшим значением, выполните SELECT MAX(ID) FROM ....

+0

- (недействительными) AddNotes: (NSString *) notesDate andNoteText: (NSString *) notesText { NSString * insertData = [NSString stringWithFormat: @ "вставить в свой блокнот (notes_date_time, notes_text) Значения ('% @', '% @')», notesDate, notesText]; [self InsUpdateDelData: insertData]; – SoftCoder

+0

как вернуть последний вставленный id из этой таблицы query @CL – SoftCoder

+0

Прочитайте документацию, к которой я привязан. Вызовите 'sqlite3_last_insert_rowid()' после того, как вы выполнили INSERT. –

0

Есть два способа сделать это один

  1. Используя sqlite3_last_insert_rowid() метод SQLITE
  2. Использование MAX (your_auto_Incremental_primary_key_variable)

Что я вообще делаю это Клуб sqlite3_last_insert_rowid() вызов с инструкцией вставки для получения последней вставленной строки ID

- (BOOL)insertItem{ 

const char *query = "your insert statement"; 
sqlite3_stmt *sqlstatement = nil; 

if (sqlite3_prepare_v2(dbreference, query, -1, &sqlstatement, NULL)==SQLITE_OK) { 

    //Your insert code here 

    float rowID = sqlite3_last_insert_rowid(dbreference); 
    NSLog(@"Last inserted row id = %.0f",rowID); 

    sqlite3_close(dbreference); 
} 

return YES; 
} 

где dbreference переменный типа sqlite3

Если указанное решение не подходит для вашего случая, то вы можете пойти с подходом Max (ID) здесь, который принимает бы имя столбца, где вы сохранили свой первичный ключ, является автоматическое инкрементный

- (int)getLastItemID{ 

const char *query = "select MAX(userid) from SampleTable"; 
sqlite3_stmt *sqlstatement = nil; 
if (sqlite3_prepare_v2(dbreference, query, -1, &sqlstatement, NULL)==SQLITE_OK) { 

    while (sqlite3_step(sqlstatement)==SQLITE_ROW) { 

     int lastInsertedPrimaryKey = sqlite3_column_int(sqlstatement, 0); 
     return lastInsertedPrimaryKey; 
    } 

    sqlite3_close(dbreference); 

} 

return 0; 
} 
Смежные вопросы