2014-10-29 3 views
-1

Я пытаюсь вставить некоторые значения в свою таблицу, не получая никаких ошибок, но значения не получают вставки. Я определил некоторые значения как varchar (100), а некоторые - целые. если вы пройдете через код, вы его получите. Если есть какие-то шаги. Также в моей таблице один столбец - это первичный ключ int. вот код.Вставка значения в таблицу sqlite iOS

 NSString *dbPath = [[[NSBundle mainBundle] resourcePath ]stringByAppendingPathComponent:@"FOM.sql"]; 
const char *dbpath = [dbPath UTF8String]; 
sqlite3 *contactDB; 

sqlite3_stmt *statement; 
    NSString*[email protected]"0"; 
NSString*[email protected]"Now"; 
NSLog(@"db path%@",dbPath); 
if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK) 
{ 
    NSString *insertSQL = @"INSERT INTO MyTable (Name,one,Two,Three,Four,Date) VALUES ('SatTest',5,7,6,'0','Now')"; 




    NSLog(@"Inser stmt %@",insertSQL); 
    const char *insert_stmt = [insertSQL UTF8String]; 

    sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL); 
    if (sqlite3_step(statement) == SQLITE_DONE) 
    { 
     NSLog(@"SqliteDone"); 
     // sqlite3_bind_text(statement, 1, [Name UTF8String], -1, SQLITE_TRANSIENT); 
     //sqlite3_bind_text(statement, 2, [r UTF8String], -1, SQLITE_TRANSIENT); 
    } else { 
     NSLog(@"error"); 
     return NO; 
    } 
    sqlite3_finalize(statement); 
    sqlite3_close(contactDB); 
} 
+0

Мне кажется, что вы пытаетесь изменить только для чтения копию базы данных в связке. (На SO есть около 100 примеров того, как инициализировать БД при запуске, если вы их ищете.) –

+0

Вы * должны * проверить возвращаемое значение 'sqlite3_prepare_v2()'. –

ответ

0
- (NSString *)ExecuteNonQuery:(NSString *)query { 
     @try { 
      query = [query stringByReplacingOccurrencesOfString:@"'" withString:@"\'"]; 
      sqlite3_prepare_v2(db, [query UTF8String], -1, &execStatement, NULL); 
      if (sqlite3_step(execStatement) == SQLITE_DONE) { 
       NSString *temp1 = [NSString stringWithFormat:@"%lld",sqlite3_last_insert_rowid(db)]; 
       return temp1; 
      } else { 
       return [NSString stringWithFormat:@"SQL Insert Error\nError Code: %d\n Error Message: %s", sqlite3_errcode(db), sqlite3_errmsg(db)]; 
      } 
      sqlite3_finalize(execStatement); 
     } 
     @catch (NSException *exception) { 
     @throw exception; 
     } 
     @finally { 
      sqlite3_close(db); 
     } 
    } 

    // Double check your query in sqlite manager and try with this code 
+0

Нет необходимости использовать try/catch для SQLite-операторов. –

+0

Вышеупомянутый код, который я упомянул, и код Irshad, заданный для вставки значения, но не сохранения его, я могу увидеть данные, если сразу проверю это, но для второго исполнения данных выполнения нет. – Sat

+1

@ Sat - VcanShakeTheWorld-- Когда вы пишете файл только для чтения, данные не имеют тенденций к сохранению. –

0

Я сделал некоторые простые операции на таблице, которая может быть вам помочь:

во-первых, создать объект SQLdb в Lazarus как: sqlite3 *dbObject;

создать DB

-(NSString *)filePath{ 

    NSString *documentsDir=[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES) objectAtIndex:0]; 
    return [documentsDir stringByAppendingPathComponent:@"Company.db"]; 
    // NSLog(@"DB CREATED"); 
} 

создать Таблица

-(void)createTable 
{ 

    if(sqlite3_open([[self filePath] UTF8String], &dbObject) == SQLITE_OK) { 
     char *err; 
     NSString *sqlString=[NSString stringWithFormat:@"CREATE TABLE IF NOT EXISTS Employee(emp_id INTEGER PRIMARY KEY,emp_name VARCHAR (20),emp_add text);"]; 

     if (sqlite3_exec(dbObject, [sqlString UTF8String], NULL,NULL,&err)!=SQLITE_OK){ 
      // created 
     } 
     else 
     { 

     } 
     sqlite3_close(dbObject); 
    } 
    else 
    { 
     NSLog(@"SaveBody: Failed from sqlite3_prepare_v2. Error is: %s ", sqlite3_errmsg(dbObject)); 
    } 


} 

вставки данных

-(void)insertData:(NSMutableArray*) mutableArr 
{ 

    if(sqlite3_open([[self filePath] UTF8String], &dbObject) == SQLITE_OK) { 
     const char *sqlQuery="INSERT INTO Employee (emp_id,emp_name,emp_add) VALUES (?,?,?)"; 
     sqlite3_stmt* statement; 


     for (NSDictionary *empdict in mutableArr) 
     { 

      if(sqlite3_prepare_v2(dbObject, sqlQuery, -1, &statement, NULL) == SQLITE_OK) 
      { 


       int card_Id = [empdict valueForKey:@"card_Id"]; 
       NSString *name =[NSString stringWithFormat:@"%@", [empdict valueForKey:@"name"]]; 
       NSString *add = [NSString stringWithFormat:@"%@",[empdict valueForKey:@"address"]]; 

       sqlite3_bind_int(statement,1,card_Id); 
       sqlite3_bind_text(statement,2,[name UTF8String], -1, SQLITE_TRANSIENT); 
       sqlite3_bind_text(statement,3,[add UTF8String], -1, SQLITE_TRANSIENT); 


       sqlite3_step(statement); 

      } 
      else { 
       NSLog(@"SaveBody: Failed from sqlite3_prepare_v2. Error is: %s ", sqlite3_errmsg(dbObject)); 
      } 


      sqlite3_finalize(statement); 
     } 

     sqlite3_close(dbObject); 
    } 

} 

получить все данные

-(void)getData:(int)empId 
{ 
    if(sqlite3_open([[self filePath] UTF8String], &dbObject) == SQLITE_OK) { 

     NSString* sqliteQuery= [NSString stringWithFormat:@"SELECT emp_name FROM Employee Where emp_id=%i;",empId]; 


     sqlite3_stmt *compiledStatement; 

     if(sqlite3_prepare_v2(dbObject, [sqliteQuery UTF8String], -1, &compiledStatement, NULL) == SQLITE_OK){ 



      while(sqlite3_step(compiledStatement) == SQLITE_ROW){ 

       NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(compiledStatement, 0)]; 

      } 
     } 

     else{ 
      NSLog(@"SaveBody: Failed from sqlite3_prepare_v2. Error is: %s ", sqlite3_errmsg(dbObject)); 
     } 
     sqlite3_finalize(compiledStatement); 

     sqlite3_close(dbObject); 
    } 
    else{ 
     NSLog(@"SaveBody: Failed from sqlite3_prepare_v2. Error is: %s ", sqlite3_errmsg(dbObject)); 
    } 


} 

обновление

-(void)updateDetails:(NSArray*)arr 
{ 
    sqlite3_stmt *statment; 
    for (NSString *tagString in arr) { 


     NSString* query = [NSString stringWithFormat:@"UPDATE Employee SET emp_name='ABC'WHERE emp_id=1;"]; 

     if(sqlite3_prepare_v2(dbObject,[query UTF8String], -1, &statment, NULL)==SQLITE_OK) 
     { 
      while(sqlite3_step(statment) == SQLITE_DONE) 
      { 
       NSLog(@"updated "); 
      } 
     } 

    } 
    sqlite3_finalize(statment); 
} 

удалить

- (void)deleteData{ 


    sqlite3_stmt* statement; 

    NSString *query = [NSString stringWithFormat:@"Delete from Employee Where emp_id=1;"]; 

    if(sqlite3_prepare_v2(dbObject,[query UTF8String], -1, &statement, NULL)==SQLITE_OK) 
    { 
     while(sqlite3_step(statement) == SQLITE_DONE) 
     { 
      // record has deleted 
     } 
     sqlite3_finalize(statement); 
    } 
} 
Смежные вопросы