Cocoa Touch と SQLite を使って日付を保存する
iPhone アプリで SQLite3 に日付を保存する
このチュートリアルでは、iPhone アプリで Cocoa Touch と SQLite を使って日付を保存する方法を説明します。
必要なもの
- Xcode
- iOS SDK
手順
- 新しい Xcode プロジェクトを作成します。
- プロジェクトに FMDB ライブラリを追加します。
- データベースファイルを作成します。
- 日付を保存するためのテーブルを作成します。
- 日付を保存するコードを追加します。
- アプリを実行してテストします。
詳細
プロジェクトの作成
Xcode を起動して、新しいプロジェクトを作成します。プロジェクトテンプレートとして "Single View Application" を選択します。
FMDB ライブラリの追加
- CocoaPods をインストールします。
- プロジェクトディレクトリで次のコマンドを実行します。
pod install FMDB
- Xcode プロジェクトファイルを開き、
Pods
ワークスペースを選択します。 FMDB.framework
をプロジェクトにドラッグアンドドロップします。
データベースファイルの作成
データベースファイルを作成する必要があります。
- プロジェクトナビゲータでプロジェクトを選択して、
Editor
>Add Files to "プロジェクト名"
を選択します。 - 新しいファイルとして "database.sqlite" を選択します。
テーブルの作成
- アプリケーションデリゲートファイルを開きます。
- 次のコードを追加します。
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// ...
// データベースを開く
FMDatabase *database = [FMDatabase databaseWithPath:[[NSBundle mainBundle] pathForResource:@"database" ofType:@"sqlite"]];
if (![database open]) {
NSLog(@"データベースを開けませんでした");
return NO;
}
// テーブルを作成
[database executeUpdate:@"CREATE TABLE IF NOT EXISTS dates (date TEXT)"];
// ...
return YES;
}
日付の保存
日付を保存するには、次のコードを使用します。
- (IBAction)saveDate:(id)sender {
// 日付を取得
NSDate *date = [NSDate date];
// データベースを開く
FMDatabase *database = [FMDatabase databaseWithPath:[[NSBundle mainBundle] pathForResource:@"database" ofType:@"sqlite"]];
if (![database open]) {
NSLog(@"データベースを開けませんでした");
return;
}
// 日付を保存
[database executeUpdate:@"INSERT INTO dates (date) VALUES (?)", date];
// データベースを閉じる
[database close];
}
日付の取得
- (IBAction)getDate:(id)sender {
// データベースを開く
FMDatabase *database = [FMDatabase databaseWithPath:[[NSBundle mainBundle] pathForResource:@"database" ofType:@"sqlite"]];
if (![database open]) {
NSLog(@"データベースを開けませんでした");
return;
}
// 日付を取得
FMResultSet *results = [database executeQuery:@"SELECT date FROM dates"];
// 結果を処理
while ([results next]) {
NSDate *date = [results dateForColumn:@"date"];
// ...
}
// データベースを閉じる
[database close];
}
アプリの実行とテスト
アプリを実行して、日付を保存して取得できることを確認します。
- このチュートリアルでは、基本的な日付の保存と取得について説明しました。
// アプリケーションデリゲートファイル
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// ...
// データベースを開く
FMDatabase *database = [FMDatabase databaseWithPath:[[NSBundle mainBundle] pathForResource:@"database" ofType:@"sqlite"]];
if (![database open]) {
NSLog(@"データベースを開けませんでした");
return NO;
}
// テーブルを作成
[database executeUpdate:@"CREATE TABLE IF NOT EXISTS dates (date TEXT)"];
// ...
return YES;
}
// 日付を保存するアクション
- (IBAction)saveDate:(id)sender {
// 日付を取得
NSDate *date = [NSDate date];
// データベースを開く
FMDatabase *database = [FMDatabase databaseWithPath:[[NSBundle mainBundle] pathForResource:@"database" ofType:@"sqlite"]];
if (![database open]) {
NSLog(@"データベースを開けませんでした");
return;
}
// 日付を保存
[database executeUpdate:@"INSERT INTO dates (date) VALUES (?)", date];
// データベースを閉じる
[database close];
}
// 日付を取得するアクション
- (IBAction)getDate:(id)sender {
// データベースを開く
FMDatabase *database = [FMDatabase databaseWithPath:[[NSBundle mainBundle] pathForResource:@"database" ofType:@"sqlite"]];
if (![database open]) {
NSLog(@"データベースを開けませんでした");
return;
}
// 日付を取得
FMResultSet *results = [database executeQuery:@"SELECT date FROM dates"];
// 結果を処理
while ([results next]) {
NSDate *date = [results dateForColumn:@"date"];
// ...
}
// データベースを閉じる
[database close];
}
dates
テーブルには、date
という名前の列があり、日付を保存します。saveDate:
アクションは、現在の
日付を SQLite3 に保存する他の方法
NSDate
オブジェクトを NSString
オブジェクトに変換してから保存することができます。
// 日付を文字列に変換
NSString *dateString = [date description];
// 文字列を保存
[database executeUpdate:@"INSERT INTO dates (date) VALUES (?)", dateString];
NSTimeInterval を使用する
// 日付を NSTimeInterval に変換
NSTimeInterval timeInterval = [date timeIntervalSinceReferenceDate];
// NSTimeInterval を保存
[database executeUpdate:@"INSERT INTO dates (date) VALUES (?)", @(timeInterval)];
独自のデータ型を作成する
SQLite3 には、日付や時刻を保存するための組み込みデータ型がありません。独自のデータ型を作成して、日付や時刻を保存することができます。
CREATE TABLE dates (
date INTEGER
);
// 日付を保存
[database executeUpdate:@"INSERT INTO dates (date) VALUES (?)", @(date.timeIntervalSince1970)];
サードパーティライブラリを使用する
日付や時刻を保存するためのサードパーティライブラリを使用することができます。
どの方法を使用するか
どの方法を使用するかは、アプリケーションの要件によって異なります。
- 日付を簡単に保存して取得したい場合は、
NSDate
を文字列に変換する方法を使用することができます。 - 日付を正確に保存したい場合は、
NSTimeInterval
を使用する方法を使用することができます。 - 独自のデータ型を作成したい場合は、より多くの制御が必要な場合に使用することができます。
- サードパーティライブラリを使用したい場合は、開発時間を短縮したい場合に使用することができます。
iphone cocoa-touch sqlite