sqliteデータベースからデータを選択しています。問題は、次のコードを使用すると、しばらく時間がかかることです。しかし、他のテーブルに対してこのメソッドを2回呼び出すと、他のメソッドにはnull selectステートメントが表示されます。メソッド内で何か間違っているので、他のテーブルで同じものを使用するとしばらく時間がかかります。sqliteからデータを選択するiOSにnull文があります
-(void)getAssessmentNumber:(NSString *)dbPath{
appDelegate=[[UIApplication sharedApplication]delegate];
NSString*fileDBPath=[[NSBundle mainBundle] pathForResource:@"Database" ofType:@"sqlite"];
if (sqlite3_open([fileDBPath UTF8String], &database) == SQLITE_OK)
{
// NSLog(@"%@",[self getDBPath]);
NSString *querySQL = [NSString stringWithFormat:@"Select Am.AssessmentID , Am.AssessmentName From AssessmentMaster Am LEFT JOIN AssessmentDepartmentMapping M ON M.AssessmentID = Am.AssessmentID LEFT JOIN DepartmentListing d ON d.departmentID =M.departmentID where d.departmentID = '%@'",appDelegate.departmentID];
NSLog(@"%@",querySQL);
const char *sql = [querySQL UTF8String];
sqlite3_stmt *selectstmt;
NSError *error;
[appDelegate.assessmentNumberArray removeAllObjects];
if (sqlite3_prepare_v2(database, sql, -1, &selectstmt, NULL) == SQLITE_OK)
{
while (sqlite3_step(selectstmt) == SQLITE_ROW)
{
NSInteger primaryKey = sqlite3_column_int(selectstmt, 0);
AssessmentListening *asmObj = [[AssessmentListening alloc] initWithPrimaryKey:primaryKey];
asmObj.assessmentID=[NSString stringWithFormat:@"%d",primaryKey];
asmObj.assessmentName = [NSString stringWithUTF8String:(char *)sqlite3_column_text(selectstmt, 1)];
[appDelegate.assessmentNumberArray addObject:asmObj];
}
}
else {
NSAssert1(0, @"Failed to create writable database file with message '%@'.", [error localizedDescription]);
}
// sqlite3_finalize(selectstmt);
}
sqlite3_close(database);
}
は、テーブルからデータを取得するため、この罰金ですか?
私はquerySQLがなくなると言っていますか? –
@TejaNandamuri sqlite3_stmt selectstmtがnullになっている理由はsqlite_step3ではない –
なぜ 'sqlite3_prepare_v2'を2回呼び出すのですか?ただ一度それを呼んでください。なぜあなたは文を準備できないときにデータベースを作成できなかったというエラーをログに記録しますか? – rmaddy