【Objective-C】FMDBでテーブル内の情報を出力する

FMDBでテーブル内の情報を出力するソースコード

前提として

  1. FMDBが導入されている(導入方法はこちら)。
  2. test.dbというファイルが iOS Simulator の Documents ディレクトリにある(iOS Simulatorののパスについてはこちら)。このディレクトリに直接データファイルを置くと、シミュレーターのバージョンごとにデータファイルを置く必要があるので面倒。解決策として、Supporting Files 内にデータファイルを置いておいて、アプリ起動時に Supporting Files 内にデータがない場合に Documents ディレクトリにコピーする方法がある。詳しくは、こちら
  3. title というカラムにデータが既に入っている

ソースコード
----------------------------------------------------------------
//インポート(ヘッダーファイル)
#import "FMDatabase.h"
----------------------------------------------------------------

----------------------------------------------------------------
- (void)viewDidLoad {

[super viewDidLoad];

// Do any additional setup after loading the view, typically from a nib.

// パスとDBファイル名を指定

NSArray *paths = NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES);

NSString *dir = [paths objectAtIndex:0];

//test.db はファイル名
NSString *db_path = [dir stringByAppendingPathComponent:@"test.db"];

FMDatabase *db = [FMDatabase databaseWithPath:db_path];

//データを抽出

[db open];

//testdb はテーブル名
FMResultSet *rs = [db executeQuery:@"select id,title from testdb"];

while ([rs next]){

// 出力

NSString *text1 = [rs stringForColumn:@"title"];

//UIlabelクラスのインスタンスを生成。
//alloc でインスタンスの生成(allocationはメモリの割り当ての意)。init で初期化。
UILabel *label = [[UILabel alloc] init];

//labelオブジェクトにテキストを設定
label.text = text1;

//コンテンツの大きさの合わせてUIViewの大きさを変える。UIViewはUIlabelの親クラス。
[label sizeToFit];

//行数の指定。0は、表示可能な最大行数。(インスペクターでの設定も可だがソースが優先される)
label.numberOfLines = 0;

label.center = self.view.center;

[self.view addSubview:label];

// 出力 ここまで

}

[rs close];

}
----------------------------------------------------------------

結果をラベルに表示せずに、配列に入れる場合はスクリプト後半を以下のように変更する

----------------------------------------------------------------
//データを抽出

[db open];

FMResultSet *rs = [db executeQuery:@"select id,title from testdb"];

while ([rs next]){

// 出力

NSString *text1 = [rs stringForColumn:@"title"];

//配列を追加。配列の型は必ず NSMutableArray であること。NSMutableArray は不可。
[testArray addObject:text1];

//UIlabelクラスのインスタンスを生成。
//alloc でインスタンスの生成(allocationはメモリの割り当ての意)。init で初期化。
// UILabel *label = [[UILabel alloc] init];

//labelオブジェクトにテキストを設定
//label.text = text1;

//コンテンツの大きさの合わせてUIViewの大きさを変える。UIViewはUIlabelの親クラス。
//[label sizeToFit];

//label.center = self.view.center;

//[self.view addSubview:label];

// 出力 ここまで

}

[rs close];
----------------------------------------------------------------