2011-12-27 102 views
1

我很困惑爲什麼SELECT語句無法正常工作。它不會給我任何錯誤,只是返回null。我知道它正確地寫入字符串,正確的字符串在那裏,它只是沒有正確讀取它。據我所知,所有的東西都是正確的,因爲我對許多其他類似的方法/函數使用了相同的SQLstmt「方法」。這只是沒有意義,爲什麼它不應該工作。當使用SELECT語句時,iOS sqlite將返回NULL

- (NSString *)returnNote { 
    selStmt=nil; 

    NSLog(@"Reading note"); 

    NSString *SQLstmt = [NSString stringWithFormat:@"SELECT 'Notes' FROM '%@' WHERE Exercises = '%@';", currentRoutine, currentExercise]; 

    // Build select statements 
    const char *sql = [SQLstmt UTF8String]; 

    if (sqlite3_prepare_v2(database, sql, -1, &selStmt, NULL) != SQLITE_OK) { 
     selStmt = nil; 
    } 

    // Building select statement failed 
    if (!selStmt) { 
     NSAssert1(0, @"Can't build SQL to read Exercises [%s]", sqlite3_errmsg(database)); 
    } 

    NSString *note = [NSString stringWithFormat:@"%s", sqlite3_column_text(selStmt, 0)]; 

    sqlite3_reset(selStmt); // reset (unbind) statement 

    return note; 
} 

回答

1

您不打電話給sqlite3_step。該聲明從未執行。

+0

SQLite C/C++ [簡介](http://www.sqlite.org/cintro.html)可能值得一讀。 – 2011-12-27 02:56:03

+0

ty的功能就像是一種魅力,當你大部分複製粘貼的時候會發生什麼 - 你不知道SQLite是如何工作的x_x可悲的是我之前也使用過step函數。 – kgaidis 2011-12-27 03:06:12

0
NSString *querySQLS1 = [NSString stringWithFormat: @"SELECT Notes FROM \"%@\" where Exercises=\"%@\"", currentRoutine, currentExercise]; 
    sqlite3_stmt *statements; 
    const char *query_stmts1 = [querySQLS1 UTF8String]; 

    if(sqlite3_prepare_v2(UsersDB, query_stmts1, -1, &statement, NULL) == SQLITE_OK) 
    { 
     NSLog(@"in prepare"); 
     if (sqlite3_step(statement) == SQLITE_ROW) 
     { 
      NSLog(@"Query executed"); 

     } 
     else { 
      NSLog(@"in else"); 
     } 

     sqlite3_finalize(statement); 
    }