2012-09-17 103 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

對不起,我沒有改變數據庫名稱,register.sqlite是我的DB名稱 – NANNAV

+0

你改變register.sqlite到weather.sqlite – NANNAV

0

我沒有看到你的數據庫從你的軟件包複製到文檔目錄。如果你不復制預製的SQLite數據庫,那麼你的公開調用將創建一個新的空的。由於您尚未在空數據庫中創建表,因此Insert調用將失敗。解決方案1:編寫文件例程以將名爲satish的預製SQLite數據庫複製到文檔目錄中。解決方案2:如果您不想預先創建sqlite數據庫,請首先在SQLite中使用create語句創建satish表。