2011-12-23 53 views
0
-(void)myDatabaseFunction 
{ 
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 
NSString *documentsDirectory = [paths objectAtIndex:0]; 
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"HHAuditToolDatabase.sqlite"]; 
if (sqlite3_open([writableDBPath UTF8String], &database) == SQLITE_OK){ 
NSLog(@"opening db"); 
NSString *keyValue; 
NSString *sqlStr = @"SELECT * FROM HHAuditTable"; 
//following if() not working dude!!!! 
//its working with !=SQLITE_OK  
if(sqlite3_open([databasePath UTF8String], &database) == SQLITE_OK) { 

sqlite3_stmt *addStmt = nil; 

if(sqlite3_prepare_v2(database,[sqlStr UTF8String], -1, &addStmt, NULL) != SQLITE_OK){ 
    NSLog(@"%@",sqlStr); 
    while (sqlite3_step(addStmt) == SQLITE_ROW) { 


const unsigned char *querry_returns = sqlite3_column_text(addStmt, 0); 
     keyValue = [[NSString alloc]initWithUTF8String:(char *) sqlite3_column_text(addStmt, 0)]; 
     } 

     NSLog(@"value from DB = %@",keyValue); 

如果()與評論不起作用....一些有治癒!我已經在最後3小時....請拿出一個solnSQLite問題:sqlite3_open([databasePath UTF8String],&數據庫)== SQLITE_OK)不工作

回答

0

乾草,你可以使用我的代碼其工作對我罰款: -

(void)myDatabaseFunction { 

NSFileManager *fileManager = [NSFileManager defaultManager]; 
NSError *error; 
dbPath = [self getDBPath]; 
BOOL success = [fileManager fileExistsAtPath:dbPath]; 

if(!success) { 

    NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"flipsy.sqlite"]; 
    success = [fileManager copyItemAtPath:defaultDBPath toPath:dbPath error:&error]; 

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

} 
NSString *sql = @"SELECT * FROM HHAuditTable"; 
NSInteger *intvalue; 
    result = [[NSMutableArray alloc] init]; 
    // NSLog(@"sql--------->%@",sql); 
    const char *sqlStatement = [sql UTF8String]; 

//if (sqlite3_open([dbPath UTF8String], &database) == SQLITE_OK) { 

    if(sqlite3_prepare_v2(database, sqlStatement, -1, &selectstmt , NULL)!= SQLITE_OK) { 
    } 

    else { 

     //NSLog(@"%@",dataTypeArray); 

     for(int i=0;i<[dataTypeArray count];i++) { 
      temp = [[NSMutableArray alloc] init]; 
      [result addObject:temp]; 
      // [temp release]; 
     } 
     while(sqlite3_step(selectstmt) == SQLITE_ROW) { 

      for(int i=0;i<[dataTypeArray count];i++) { 

       switch([[dataTypeArray objectAtIndex:i] integerValue]) { 

        case 0: 
         intvalue = (NSInteger *)sqlite3_column_int(selectstmt,i); 
         strvalue = [NSString stringWithFormat:@"%d",intvalue]; 
         [[result objectAtIndex:i] addObject:(NSNumber *)strvalue]; 


         break; 

        case 1: 
         [[result objectAtIndex:i] addObject:[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, i)]]; 
         break; 

        case 2: 

         blob = [[NSData alloc] initWithBytes:sqlite3_column_blob(selectstmt, i) length:sqlite3_column_bytes(selectstmt, i)]; 
         [[result objectAtIndex:i] addObject:blob]; 
         [blob autorelease]; 
         break; 


        default: 
         defaultValue=[NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, i)]; 
         break; 

        }//switch 

      }//for(int i=0;i<[dataTypeArray count];i++) 

     }//while(sqlite3_step(selectstmt) == SQLITE_ROW) 

    //}//else 

    //sqlite3_close(database); 
    sqlite3_finalize(selectstmt); 
    [temp release]; 

}//if (sqlite3_open([dbPath UTF 

} 

- (NSString *) getDBPath { 

NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES); 
NSString *documentsDir = [paths objectAtIndex:0]; 
return [documentsDir stringByAppendingPathComponent:@"flipsy.sqlite"]; 
} 

請讓我知道是否有必要澄清

3

您打開數據庫兩次。您應該必須關閉數據庫連接,然後必須再次打開數據庫。這就是爲什麼它不起作用。

+0

我剛要問他爲什麼開了兩次! – Wevah 2011-12-23 08:25:34

+0

即時對不起惡魔....錯誤的變量名稱....任何方式@哈迪克沙阿我也會檢查....謝謝 – Deepukjayan 2011-12-23 10:08:57