忘れないうちに書いておく。
DATABaseのフィールドに問題、解答、分野があるとする。
まずはファイルDBAccess.h DBAccess.mをつくる
DBAcess.h は以下のようにする
@interface DBAccess : NSObject
{
NSString *kaitou;
NSString *bunya;
NSString *mondai;
}
+(NSMutableArray*)searchAll;
@property (nonatomic, retain, readwrite) NSString *bunya; //分野
@property (nonatomic, retain, readwrite) NSString *kaitou;//解答
@property (nonatomic, retain, readwrite) NSString *mondai;//問題
これでデータベースのひな形がオーバーラップされる
次はDBAccess.m
メソッドとしてsearchを定義して
引数にSQLを渡すとする
Dataのフィールドを一行ごとをまるまるクラスオブジェクトととらえて
NSMutableArrayにいれるものとする
/------------------------
//メソッド search
//引数 SQL文(sqlPara)
//戻り値は NSMutableArray
//--------------------------
+(NSMutableArray*)search:(NSString*)sqlPara
{
NSArray *paths = NSSearchPathForDirectoriesInDomains(
NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDir = [paths objectAtIndex:0];
NSString *dbPath = [documentsDir stringByAppendingPathComponent:DBPATH];
sqlite3_stmt *stmt = nil;
//-----------------------
//NSString*->char*への変換
//-----------------------
char* sql = [sqlPara UTF8String];
NSMutableArray *listData = [[[NSMutableArray alloc]init]autorelease];
[listData retain];
if(sqlite3_open([dbPath UTF8String], &database) != SQLITE_OK) {
sqlite3_close(database);
return listData;
}
if(sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) == SQLITE_OK) {
while(sqlite3_step(stmt) == SQLITE_ROW) {
DBAccess *data = [[[DBAccess alloc]init]autorelease];
// TEXT型として取得。値がないときはNULLになるのでチェックが必要
//分野
char* bunya = (char *)sqlite3_column_text(stmt, 0);
if (bunya)
data.bunya = [NSString stringWithUTF8String:bunya];
//問題
char* mondai = (char *)sqlite3_column_text(stmt, 1);
if (mondai)
data.mondai = [NSString stringWithUTF8String:mondai];
//解答
char* kaitou = (char *)sqlite3_column_text(stmt, 2);
if (kaitou)
data.kaitou = [NSString stringWithUTF8String:kaitou];
//番号
data.bangou =(int)sqlite3_column_int(stmt, 3);
//しおり
char* shiori = (char *)sqlite3_column_text(stmt, 4);
[listData addObject:data];
}
}else{
NSAssert1(0, @"Error Select pages statement. '%s'",
sqlite3_errmsg(database));
NSLog(@"%@",sqlite3_errmsg(database));
}
sqlite3_reset(stmt);
sqlite3_finalize(stmt);
sqlite3_close(database);
return listData;
}
呼び出しかたは
NSString *sql =@"select bunya,mondai,kaitou from mondai ]
NSMutableArray *list=[DBAccess search:sql];
for(DBAccess *s in list){
NSLog(@"%@",s.mondai);
NSLog(@"%@",s.bunya);
NSLog(@"%@",s.kaitou);
}
解説は後ほど