2014-06-23 2 views
0

Привет, в моем приложении У меня есть данные, которые хотят вставить в мою базу данных sqlite. Так что я уже создал базу данных успешно, Но проблема в том, что она не вставляет данные в базу данных.Данные не вставляются в базу данных sqlite

Код моей базы данных.

- (void)createDatabase 
    { 

    NSArray *directories = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *doctumentsDirectory = [directories lastObject]; 
    self.databasePath = [[NSString alloc] initWithString:[doctumentsDirectory stringByAppendingPathComponent:@"/bp.sqlite"]]; 

    NSFileManager *fileManager = [NSFileManager defaultManager]; 

    // create DB if it does not already exists 
    if (![fileManager fileExistsAtPath:self.databasePath]) { 

     const char *dbPath = [self.databasePath UTF8String]; 

    if (sqlite3_open(dbPath, &_myDataBase) == SQLITE_OK) { 

     char *errorMsg; 
     const char *sql_statement = "CREATE TABLE IF NOT EXISTS br (ID INTEGER PRIMARY KEY AUTOINCREMENT, NAME TEXT, COST TEXT,QUTY TEXT)"; 

     if (sqlite3_exec(_myDataBase, sql_statement, NULL, NULL, &errorMsg) != SQLITE_OK) { 

      [self errorCreatingTable:[NSString stringWithFormat:@"failed creating table. ERROR:%s", errorMsg]]; 
     } 

      sqlite3_close(_myDataBase); 

     } else { 

     [self errorCreatingTable:@"failed openning/creating table"]; 
     } 
    } 
} 

Код моей вставки У меня есть метод действия UIButton, где я указываю код вставки.

-(void)aMethod2:(UIButton*)sender 
{ 

    NSString *inr=[intarr objectAtIndex:sender.tag]; 
    NSLog(@"%@",inr); 
    NSString *item=[self.menuarray objectAtIndex:sender.tag]; 
    NSLog(@"%@",item); 
    NSString *cost=[self.menuarray1 objectAtIndex:sender.tag]; 
    NSLog(@"%@",cost); 
    NSString *sql = [NSString stringWithFormat:@"INSERT INTO br ('NAME','COST','QUTY') VALUES ('%@','%@','%@')",item,cost,inr]; 
    NSLog(@"%@",sql); 
} 

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

Спасибо.

+0

Где ' aMethod2' доступ к базе данных? –

+0

@CL. это мой uibutton aciton methos – Shanthanu

ответ

1

попробовать этот код ...

-(void)Insertdata:(NSString*)query{ 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
    NSString *documentsDirectory = [paths objectAtIndex:0]; 
    NSString *databasePath = [documentsDirectory stringByAppendingPathComponent:@"bp.sqlite"]; 
    NSLog(@"%@",databasePath); 
    if(sqlite3_open([databasePath UTF8String],&_myDataBase) == SQLITE_OK) 
    { 
     NSString *querySQL = [NSString stringWithFormat: @"%@",query]; 

     char *errmsg=nil; 

     if(sqlite3_exec(_myDataBase, [querySQL UTF8String], NULL, NULL, &errmsg)==SQLITE_OK) 
     { 
      NSLog(@".. Inserted .."); 
     } 
    } 
    sqlite3_close(_myDataBase); 
} 
0

файл DBmanager.h

#import <Foundation/Foundation.h> 
#import <sqlite3.h> 

@interface DBReadWriteUtil : NSObject 

+(sqlite3*)copyDbToDocumentsDirectoryIfNotExist; 
+(BOOL)insertData:(NSString*)arg1 cost:(int)arg2 quty:(int)arg3; 
+(NSDictionary*)getUploadPendingMedia; 
+(int)removeMediaPOStFormId:(int)row_id; 
@end 

файл DBmanager.m

#import "DBReadWriteUtil.h" 

@implementation DBReadWriteUtil 

+(sqlite3*)copyDbToDocumentsDirectoryIfNotExist{ 

    NSString *dbPath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"bp.sqlite"]; 
    NSFileManager *fileManager = [NSFileManager defaultManager]; 
    if(![fileManager fileExistsAtPath:dbPath]) { 
     NSString *localDB = [[NSBundle mainBundle] pathForResource:@"bp" ofType:@"sqlite"]; 
     NSError *err; 
     if(![fileManager copyItemAtPath:localDB toPath:dbPath error:&err]){ 
      if (DEBUG_MODE) { 
      NSLog(@"SQL: Not ABLE TO COPY FILE -> %@",err); 
      } 
     } 
    } 
    sqlite3 *db_connction; 
    if(sqlite3_open([dbPath UTF8String], &db_connction) != SQLITE_OK){ 
     if (DEBUG_MODE) { 
      NSLog(@"SQL : Not ABLE TO CONNECT DB:"); 
     } 
    } 
    return db_connction; 
} 

+(BOOL)insertData:(NSString*)arg1 cost:(int)arg2 quty:(int)arg3{ 
      BOOL dbStatus = NO; 
      sqlite3 *db_connction = [DBReadWriteUtil copyDbToDocumentsDirectoryIfNotExist]; 
      sqlite3_stmt *compiledStmt; 
      const char *query = "insert into br(NAME,cost,quay) values(?,?,?)"; 
      if(sqlite3_prepare_v2(db_connction, query, -1, &compiledStmt, NULL) == SQLITE_OK){ 
       sqlite3_bind_text(compiledStmt,1,[arg1 UTF8String],-1,SQLITE_TRANSIENT); 
       sqlite3_bind_int(compiledStmt, 2, arg2); 
       sqlite3_bind_int(compiledStmt,3, arg3,-1); 

       NSUInteger err = sqlite3_step(compiledStmt); 
       if (err != SQLITE_DONE){ 
        if(DEBUG_MODE){ 
         NSLog(@"error while Inserting image %d %s",err, sqlite3_errmsg(db_connction)); 
        } 
       }else{ 
        dbStatus = YES; 
       } 
      } 
      sqlite3_finalize(compiledStmt); 
      sqlite3_close(db_connction); 

      return dbStatus; 
     } 

Вызов DBManager

BOOL successDB = [DBReadWriteUtil insertData: arg1 cost:arg2 quty:arg3]; 
5

Когда я увидел ваш вопрос, я не мог видеть то, что было немного странно для меня ... и это видел мой собственный код. спасибо за использование моего кода со StackOverflow :) getting error while trying to create sqlite database 'Could not create table' IOS7

В любом случае, вот краткий пример того, как вставить:

- (void)insertDictionaryToDataBase:(NSDictionary *)dictionary 
{ 
    if (dictionary) { 

     sqlite3_stmt *sql_statement; 
     const char *dbPath = [self.databasePath UTF8String]; 

     if (sqlite3_open(dbPath, &_inboxDatabase) == SQLITE_OK) { 

      NSString *insertSQL = [NSString stringWithFormat:@"INSERT INTO MY_TABLE_NAME (COLUMN_A, COLUMN_B, COLUMN_C) VALUES (?,?,?)"]; 

      const char *insertStatement = [insertSQL UTF8String]; 

      sqlite3_prepare_v2(_inboxDatabase, insertStatement, -1, &sql_statement, NULL); 

      sqlite3_bind_text(sql_statement, 1, [dictionary[@"key1"] UTF8String], -1, SQLITE_TRANSIENT); 
      sqlite3_bind_text(sql_statement, 2, [dictionary[@"key2"] UTF8String], -1, SQLITE_TRANSIENT); 
      sqlite3_bind_int(sql_statement, 3, [dictionary[@"key3"] intValue]); 


      if (sqlite3_step(sql_statement) == SQLITE_DONE) { 

       NSLog(@"sucess!"); 
      } 

      sqlite3_finalize(sql_statement); 
      sqlite3_close(_inboxDatabase); 
     } 
    } 
} 
Смежные вопросы