2013-04-10 65 views
0

有人可能會這麼熱心填寫下面幾段缺少的代碼。我正在努力使用sqlite3_step執行一個sqlite語句,迭代每行結果並將數據轉換爲可用格式。如何通過sqlite_step結果進行迭代

下面是創建數據庫(Database是僅有的兩個colums)

// Check if database is setup, if not create it 
NSString *documents_directory; 
NSArray *directory_path; 

// Get the documents directory 
directory_path = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); 

documents_directory = [directory_path objectAtIndex:0]; 

// Build the path to the database file 
databasePath = [[NSString alloc] initWithString: [documents_directory stringByAppendingPathComponent: @"weights.db"]]; 

NSFileManager *file_manager = [NSFileManager defaultManager]; 

// Create database if it doesn't already exist 
if([file_manager fileExistsAtPath: databasePath ] == NO){ 
    const char *database_path = [databasePath UTF8String]; 

    if(sqlite3_open(database_path, &contactDB) == SQLITE_OK){ 
     char *error_message; 
     const char *sql_statement = "CREATE TABLE IF NOT EXISTS RECORDED_WEIGHTS (ID INTEGER PRIMARY KEY AUTOINCREMENT, WEIGHT TEXT, TIME TEXT)"; 

     if(sqlite3_exec(contactDB, sql_statement, NULL, NULL, &error_message) != SQLITE_OK){ 
      status.text = @"Failed to create table";     
     } 
     sqlite3_close(contactDB); 

    }else{ 
     status.text = @"Failed to open/create database"; 
    } 
} 

這裏是我試圖完成代碼的代碼;

// Get info from database and load it. 
const char *database_path = [databasePath UTF8String]; 
sqlite3_stmt *statement; 

if(sqlite3_open(database_path, &contactDB) == SQLITE_OK){ 

    NSString *SQLquery = [NSString stringWithFormat:@"SELECT * FROM RECORDED_WEIGHTS ORDER BY TIME DESC"]; 

    const char *query_statement = [SQLquery UTF8String]; 


    if(sqlite3_prepare_v2(contactDB, query_statement, -1, &statement, NULL) == SQLITE_OK){ 

     // Please help me execute statement and get results into useable format here. 




    } 

    sqlite3_finalize(statement); 

} 
sqlite3_close(contactDB); 

在此先感謝。

回答

0

你想要做這樣的事情:

while(sqlite3_step(statement) == SQLITE_ROW) 
{ 
    // int value 
    int intValue = sqlite3_column_int(statement,fieldIndex); 

    // string value 
    NSString* stringValue; 
    if (sqlite3_column_type(dbps, fieldIndex) != SQLITE_NULL) 
    { 
     const char *c = (const char *)sqlite3_column_text(dbps, fieldIndex); 
     if (c) 
     { 
      stringValue = @(c); 
     } 
    } 

     ... etc... 
} 

看看在不同列類型的文件。您還可以查看不同的Objective-C封裝來了解如何訪問數據庫。