2017-06-15 14 views
0

私は3つの値が1つの保存方法から来て、2つはanother.With私は最初の3つの列を最初から保存するデータを挿入する私のテーブルに5列があります塗りつぶされ、次の更新メソッドで塗りつぶされる他の2列が同じ行にあります。 IDを使用して更新しようとしましたが、これは特定の行のみを更新しています。 P.S:iOS &初心者です。初めてsqliteを操作しています。 私はここで何: - あなたの問題がUpdateTable...saveData...方法で保存された行を識別することである場合ID、sqliteを使用して同じ行の列を更新

-(BOOL)createDB 
{ 
    NSString *docsDir; 
    NSArray *dirPaths; 
    // Get the documents directory 
    dirPaths = NSSearchPathForDirectoriesInDomains 
    (NSDocumentDirectory, NSUserDomainMask, YES); 
    docsDir = dirPaths[0]; 
    // Build the path to the database file 
    databasePath = [[NSString alloc] initWithString: 
        [docsDir stringByAppendingPathComponent: @"Calendardatabase.db"]]; 

    NSLog(@"%@",databasePath); 
    BOOL isSuccess = YES; 
    NSFileManager *filemgr = [NSFileManager defaultManager]; 
    if ([filemgr fileExistsAtPath: databasePath ] == NO) 
    { 
     const char *dbpath = [databasePath UTF8String]; 
     if (sqlite3_open(dbpath, &database) == SQLITE_OK) 
     { 
      char *errMsg; 
      const char *sql_stmt = 

"create table if not exists CalendarDataTable (ID INTEGER PRIMARY KEY AUTOINCREMENT,pl1 text, recordedTmpFile text,NavlabelDate text,eventTypeImgView text,eventNameLblP2 text)"; 
      if (sqlite3_exec(database, sql_stmt, NULL, NULL, &errMsg) 
       != SQLITE_OK) 
      { 
       isSuccess = NO; 
       NSLog(@"Failed to create table"); 
      } 
      sqlite3_close(database); 
      return isSuccess; 
     } 
     else { 
      isSuccess = NO; 
      NSLog(@"Failed to open/create database"); 
     } 
    } 
    return isSuccess; 
} 


-(BOOL)saveData:(NSString*)pl1 recordedTmpFile:(NSString*)recordedTmpFile NavlabelDate:(NSString*)NavlabelDate eventTypeImgView:(NSString*)eventTypeImgView eventNameLblP2:(NSString*)eventNameLblP2; 
//-(BOOL)saveData:(NSString*)eventTypeImgView eventNameLblP2:(NSString*)eventNameLblP2 pl1:(NSString*)pl1 pl2:(NSString*)pl2 pl3:(NSString*)pl3 pl4:(NSString*)pl4; 
{ 
    const char *dbpath = [databasePath UTF8String]; 
    if (sqlite3_open(dbpath, &database) == SQLITE_OK) 
    { 
     NSString *insertSQL = [NSString stringWithFormat:@"insert into CalendarDataTable (pl1,recordedTmpFile,NavlabelDate,eventTypeImgView,eventNameLblP2) values (\"%@\",\"%@\",\"%@\",\"%@\",\"%@\")",pl1,recordedTmpFile,NavlabelDate,eventTypeImgView,eventNameLblP2]; 


     // NSString *insertSQL = [NSString stringWithFormat:@"insert into CalendarDataTable (eventTypeImgView, eventNameLblP2 pl1 pl2 pl3 pl4) values (\"%@\",\"%@\",\"%@\",\"%@\",\"%@\",\"%@\")",eventTypeImgView,eventNameLblP2,pl1,pl2,pl3,pl4]; 


     const char *insert_stmt = [insertSQL UTF8String]; 
     sqlite3_prepare_v2(database, insert_stmt,-1, &statement, NULL); 
     if (sqlite3_step(statement) == SQLITE_DONE) 
     { 
      return YES; 
     } 
     else 
     { 
      return NO; 
     } 
    // sqlite3_reset(statement); 
    } 
    return NO; 
} 


-(BOOL)UpdateTable:(NSString*)eventTypeImgView eventNameLblP2:(NSString*)eventNameLblP2; 
{ 
    const char *dbpath = [databasePath UTF8String]; 
    if (sqlite3_open(dbpath, &database) == SQLITE_OK) 
    { 
     NSString *updateSQL = [NSString stringWithFormat:@"UPDATE CalendarDataTable set eventTypeImgView='%@',eventNameLblP2='%@' where ID=1",eventTypeImgView,eventNameLblP2]; 
     NSLog(@"%@",updateSQL); 
     const char *insert_stmt = [updateSQL UTF8String]; 
     sqlite3_prepare_v2(database, insert_stmt,-1, &statement, NULL); 
     if (sqlite3_step(statement) == SQLITE_DONE) 
     { 
      return YES; 
     } 
     else 
     { 
      return NO; 
     } 
     // sqlite3_reset(statement); 
    } 
    return NO; 
} 

答えて

0

、あなたがsaveData...に挿入されたデータから、何らかの方法で生成されたカスタム識別子を使用することができます。

、のはcreatedと呼ばれるCalendarDataTableに余分なフィールドを追加し、その中のいくつかのユニークな生成された値を保存しましょう例えば、現在のタイムスタンプ[NSDate timeIntervalSinceReferenceDate] * 1000、店舗のタイムスタンプとそれらを使用where句はanswer.doあなたのためID

+0

感謝のinstedされます私は同じVC上で2テーブルビューを持っていることを確認して、セルのクリックでユニークなIDを生成する方法を知っている。 – iOSBeginner

+0

@iOSBeginnerこの回答が問題を解決した場合は、それを受け入れたものとしてマークします(左側のチェックマーク)。セルクリックの生成に関する質問は別の質問です。自分で解決策が見つからない場合は、別のトピックを作成してください。私は個人的にSQLiteのためにhttps://github.com/ccgus/fmdbを使用しています。ここで使用しているsqlite3のすべてのものを包む良いラッパーです – schmidt9

+0

私はキーを使用したい日付を使用しているので、毎回ユニークです。日々 – iOSBeginner

関連する問題