2012-09-17 4 views
3

sqlite3 데이터베이스에 값을 삽입하려했지만 내 응용 프로그램에서는 작동하지 않습니다. 나는이 코드를 따르며 테이블의 모든 값은 varchar입니다.SQLITE 데이터베이스에 값을 입력하십시오.

sqlite3_stmt *statement; 

NSString *docsDir; 
NSArray *dirPaths; 
int ID; 
// Get the documents directory 
dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

docsDir = [dirPaths objectAtIndex:0]; 

// Build the path to the database file 
databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent: @"weather.sqlite"]]; 


const char *dbpath = [databasePath UTF8String]; 

if (sqlite3_open(dbpath, &contactDB) == SQLITE_OK) 
{ 
    NSString *insertSQL = [NSString stringWithFormat: @"INSERT INTO satish VALUES ('jodhpur','hazy1','68','7','700','30','28','10sept')"]; 

    const char *insert_stmt = [insertSQL UTF8String]; 

    sqlite3_prepare_v2(contactDB, insert_stmt, -1, &statement, NULL); 
    { 
     NSLog(@"%@",statement); 
     sqlite3_bind_text(statement, 1, insert_stmt, -1, SQLITE_TRANSIENT); 

     if (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      ID = sqlite3_last_insert_rowid(contactDB); 

      NSLog(@"Data inserted successfully "); 

     } 
     else{    
      NSLog(@"Failed to add contact"); 
     } 
    } 
    sqlite3_finalize(statement); 
    sqlite3_close(contactDB); 
} 

답변

2
//tyr this code  
// you must give the column name to insert values in DB 

    NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
      NSString *documentsDir = [paths objectAtIndex:0]; 

      NSFileManager *fileManager = [NSFileManager defaultManager]; 
      NSError *error; 
      NSString *dbPath =[documentsDir stringByAppendingPathComponent:@"register.sqlite"]; 
      BOOL success = [fileManager fileExistsAtPath:dbPath]; 
      sqlite3_stmt *selectstmt; 
      if(!success) 
      { 
       NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"register.sqlite"]; 
       success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; 

       if (!success) 
        NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]); 
      } 

      if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { 
       //*************** insert value in database******************************\\ 

       const char *sql = "insert into satish (firstname,lastname,email,company,phone) VALUES ('sdcbb','bbbb','bbbb','bbbb',1111122)"; 
       sqlite3_prepare_v2(database,sql, -1, &selectstmt, NULL); 
       if(sqlite3_step(selectstmt)==SQLITE_DONE) 
       { 
        NSLog(@"insert successfully"); 
       } 
       else 
       { 
        NSLog(@"insert not successfully"); 

       } 
      sqlite3_finalize(selectstmt); 
       sqlite3_close(database); 
      } 
+0

코드에서 –

+0

죄송 데이터베이스 무엇인가, 내가 DB 이름을 변경하고 있지 않다, register.sqlite는 (사 티로 열 이름을 삽입 " – NANNAV

+0

입니다) VALUES (귀하의 가치) "; – NANNAV

0

번들에서 문서 디렉토리로 데이터베이스를 복사하는 위치는 표시되지 않습니다. premade SQLite 데이터베이스를 복사하지 않으면 open 호출은 새로운 빈 데이터베이스를 생성합니다. 빈 데이터베이스에 테이블을 아직 만들지 않았으므로 삽입 호출이 실패합니다. 해결책 1 : 문서 디렉토리에 satish라는 테이블이있는 premade SQLite 데이터베이스를 복사하는 파일 루틴을 작성하십시오. 해결 방법 2 : sqlite 데이터베이스를 미리 만들지 않으려면 먼저 SQLite에서 create 문을 사용하여 satish 테이블을 만듭니다.

관련 문제