iPhone 개발자로서의 기술을 쌓으려고하고 있으며 현재 SQLite 데이터베이스를 사용하고 있습니다.SQLite 데이터베이스에서 결과를 검색 할 수 없습니다.
- (void)viewDidLoad {
[super viewDidLoad];
GroceryList1AppDelegate *appDelegate = (GroceryList1AppDelegate *)[[UIApplication sharedApplication] delegate];
self.results = [appDelegate.database executeSqlWithParameters:@"SELECT * from GroceryItem where number < ?", [NSNumber numberWithInt:6], nil];
}
내 executeSqlWithParameters() 메소드는 다음과 같습니다
- (void)applicationDidFinishLaunching:(UIApplication *)application {
self.database = [[[ISDatabase alloc] initWithFileName:@"TestDB.sqlite"] autorelease];
if(![[database tableNames] containsObject:@"GroceryItem"]) {
[database executeSql:@"create table GroceryItem(primaryKey integer primary key autoincrement, name text NOT NULL, number integer NOT NULL)"];
[database executeSql:@"insert into GroceryItem (name, number) values ('apples', 5)"];
[database executeSql:@"insert into GroceryItem (name, number) values ('oranges', 3)"];
}
[window addSubview:navigationController.view];
[window makeKeyAndVisible];
}
내 RootViewController.m 클래스의 SQL 호출을 내 GroceryListAppDelegate.m 클래스에서 다음과 같이 내가 SQLite는 테이블을 만들었습니다 : 내가 구축하고 내 코드를 실행하면
- (NSArray *) executeSql:(NSString *)sql withParameters: (NSArray *) parameters {
NSMutableDictionary *queryInfo = [NSMutableDictionary dictionary];
[queryInfo setObject:sql forKey:@"sql"];
if (parameters == nil) {
parameters = [NSArray array];
}
//we now add the parameters to queryInfo
[queryInfo setObject:parameters forKey:@"parameters"];
NSMutableArray *rows = [NSMutableArray array];
//log the parameters
if (logging) {
NSLog(@"SQL: %@ \n parameters: %@", sql, parameters);
}
sqlite3_stmt *statement = nil;
if (sqlite3_prepare_v2(database, [sql UTF8String], -1, &statement, NULL) == SQLITE_OK) {
[self bindArguments: parameters toStatement: statement queryInfo: queryInfo];
BOOL needsToFetchColumnTypesAndNames = YES;
NSArray *columnTypes = nil;
NSArray *columnNames = nil;
while (sqlite3_step(statement) == SQLITE_ROW) {
if (needsToFetchColumnTypesAndNames) {
columnTypes = [self columnTypesForStatement:statement];
columnNames = [self columnNamesForStatement:statement];
needsToFetchColumnTypesAndNames = NO;
}
id row = [[NSMutableDictionary alloc] init];
[self copyValuesFromStatement:statement toRow:row queryInfo:queryInfo columnTypes:columnTypes columnNames:columnNames];
[rows addObject:row];
[row release];
}
}
else {
sqlite3_finalize(statement);
[self raiseSqliteException:[[NSString stringWithFormat:@"failed to execute statement: '%@', parameters: '%@' with message: ", sql, parameters] stringByAppendingString:@"%S"]];
}
sqlite3_finalize(statement);
return rows;
}
, 나는 아무 결과, 사실, 내 SQL 호출을 주어 졌을 때, 내 목록에 사과, 오렌지를 얻을해야 얻을. 그러나, 나는이 내 SQL 코드를 수정 : 다른 메소드를 호출
self.results = [appDelegate.database executeSql:@"SELECT * from GroceryItem"];
을 : executeSql() : 사과, 오렌지 :
- (NSArray *) executeSql: (NSString *)sql {
return [self executeSql:sql withParameters: nil];
}
을이 경우에, 나는 결과를 치울 . 왜 이런거야? 내가 도대체 뭘 잘못하고있는 겁니까? 왜 SQL 호출에서 결과를 얻는 것이지 다른 SQL 호출에서 결과를 얻지 못하는 것입니까?
답장을 보내 주셔서 대단히 감사합니다. 하지만 시뮬레이터에서 .sqlite 파일을 어떻게 추출하고 sqlite3을 사용하여 명령 줄에서 열 수 있습니까? 도와 줘서 고마워. – syedfa