日曜なのに朝から人と会いに出かける。
久しぶりに、初対面でどう対応したいいのかわからない状況になった。
コミュ能力が落ちたか?ww まあ最終的には落ち着いたからいいか。
やはり平時の経験だなあ。もうちょいリハビリしたいぜ。
話は変わって、、、。
アプリを作り中なのに、別のアプリが気になってそっちに手を出すw
まあ、以前作ったものの手直しなんだけどね。
簡単にいえば湯遊ナビの全面刷新をしようかなと。
一緒にやってたデータ担当者が別のことで忙しいので、データ精度は仕方がない。
いずれ彼のがんばりに期待しよう。俺はデータ以外の担当だ。
このアプリは温浴施設をDBに登録して、そこからさまざまな方法で検索させている。
都道府県別に検索したり、緯度経度を元に近くの施設を検索することもできる。
現在のバージョンは、iOSのCoreDataを使っている。
iOSが標準で用意しているDBだからね。このアプリを作った頃は、まず標準を理解するが優先だった。
バージョンアップ時のDBスキーマ変更とか、いろいろやったもんだ。
当時は資料が少なくてなぁ…。あの時の苦労はいろんな場所で役立つことになった。
そして、今回はSQLiteを使うことにする。
O/Rマッパーは優れた技術だと思うが、まだ完全だとは思えない。
今回はSQLで古いなりにやってみよう。
CoreDataが面倒で日和っているわけじゃ、、、、アルようなナイようなwww
じゃあさっそくアプリに組み込み!
というわけにはイカンのだw
SQLiteはデータを一つのファイルとして持っている。
これがなきゃそもそもDBが動かないのぜw
空のDBを作ってもいいが、実際は他のDBから書き出すのが安全だろう。
DBサービスをiOSで提供する場合、SQLiteで0から作るっていうのはまずないだろうし。
今回はWebでサービスを提供しているMySQLからSQLiteに入れてみる。
まずはテーブルかDBインスタンスをmusqldumpで書き出す。
続いて、MySQLでは有効だがSQLiteでは無効な行を潰す。
実際はEngine=MyISM〜〜などのテーブル定義最終行と、/*コメント*/部分になるだろう。
最後にSQLiteのデータファイルに書き込む。
今回はFirefoxにSQLite用のクライアントアドオン「SQLite Maneger」を突っ込んだ。
このアドオンは空のSQLiteファイルを作ることもできるので楽である。
アドオンをインストしたあとに、ツールメニューの SQLite Maneger で起動する。
まずは左上の白紙のボタンを押して新しいDBを作る。保存先はデスクトップなどどこでもOK。
続いてDBに矢印を突っ込んでる「取り込み」ボタンを押して、右のエリアを Import Wizard に切り替える。
あとはさっき修正したmysqldumpのファイル名を指定して、「SQL」を選び、「OK」すればよい。
ダンプ内容にエラーがあれば表示してくれるので、そこを直すこと。
成功すれば左のテーブル一覧「Tables」に、インポートしたテーブルが入っている。
テーブルを選んで「参照と検索」を選べば、テーブルの内容が表示される。
これでSQLiteのファイル作成は完了だ。
このファイルは拡張子に.sqliteとあるが、プロジェクトに組み込む前に.dbに変える。
普通の方法では変わらないことがあるので、Finderの「情報を見る」で確実に拡張子が変わっていることを確認しよう。「情報を見る」の内部でも変更できる。
ちなみに、SQLiteはデータが1ファイルになっているので、
SQLite Maneger で直接中身を見ることもできる。このあたりは実にお手軽だね。
スケールとかいくつかの問題はあるが、適材適所ってことだな。
さてここからはXcodeの作業だ。
iOSにはFMDBというSQLite用のライブラリがある
https://github.com/ccgus/fmdb
ここからzipでダウンロードして解凍すると、中にはいろいろ出てくるが、
メインで使うのはsrc配下のファイルだ。
src配下のfmdb.m以外を全部利用する(fmdb.mはmain.mの入ったサンプルコードの呼び出し元)。
それらを自分のプロジェクトディレクトリにコピーしてAddする。
さらにライブラリとしてlibsqlite3.0.dylibを追加すること。
これは既存のフレームワーク(mapkitとか)と同じ方法で組み込む。
さらに、さっきつくったSQLiteファイルもプロジェクトにコピーして組み込む。拡張子に注意。
あとはDBを使いたいビューなどで下のようにインポート。
#import "FMDatabase.h"
#import "FMDatabaseAdditions.h"
あとは接続してselectなどすればいい。
ここから先はこのページのほうが役立つだろう。
FMDBをつかってiPhoneで簡単にSQLiteを使う
最低限の部分だけコメントを追加して転載
実際に呼び出すのはこんな感じ。
元ページだとINSERTとかも書いてある。是非一読を。
これで、使い慣れたSQLがiOSで動きそうだ。
まあ実際はCoreDataも、中身はSQLite。O/Rマッパーが完全に包んでいるわけだな。
自分の使いやすい方、状況にあった方を使えばよい。開発における選択肢は重要だ。
リファクタリングは自分を成長させる機会でもある。
前向きに行こう。
久しぶりに、初対面でどう対応したいいのかわからない状況になった。
コミュ能力が落ちたか?ww まあ最終的には落ち着いたからいいか。
やはり平時の経験だなあ。もうちょいリハビリしたいぜ。
話は変わって、、、。
アプリを作り中なのに、別のアプリが気になってそっちに手を出すw
まあ、以前作ったものの手直しなんだけどね。
簡単にいえば湯遊ナビの全面刷新をしようかなと。
一緒にやってたデータ担当者が別のことで忙しいので、データ精度は仕方がない。
いずれ彼のがんばりに期待しよう。俺はデータ以外の担当だ。
このアプリは温浴施設をDBに登録して、そこからさまざまな方法で検索させている。
都道府県別に検索したり、緯度経度を元に近くの施設を検索することもできる。
現在のバージョンは、iOSのCoreDataを使っている。
iOSが標準で用意しているDBだからね。このアプリを作った頃は、まず標準を理解するが優先だった。
バージョンアップ時のDBスキーマ変更とか、いろいろやったもんだ。
当時は資料が少なくてなぁ…。あの時の苦労はいろんな場所で役立つことになった。
そして、今回はSQLiteを使うことにする。
O/Rマッパーは優れた技術だと思うが、まだ完全だとは思えない。
今回はSQLで古いなりにやってみよう。
CoreDataが面倒で日和っているわけじゃ、、、、アルようなナイようなwww
じゃあさっそくアプリに組み込み!
というわけにはイカンのだw
SQLiteはデータを一つのファイルとして持っている。
これがなきゃそもそもDBが動かないのぜw
空のDBを作ってもいいが、実際は他のDBから書き出すのが安全だろう。
DBサービスをiOSで提供する場合、SQLiteで0から作るっていうのはまずないだろうし。
今回はWebでサービスを提供しているMySQLからSQLiteに入れてみる。
まずはテーブルかDBインスタンスをmusqldumpで書き出す。
続いて、MySQLでは有効だがSQLiteでは無効な行を潰す。
実際はEngine=MyISM〜〜などのテーブル定義最終行と、/*コメント*/部分になるだろう。
最後にSQLiteのデータファイルに書き込む。
今回はFirefoxにSQLite用のクライアントアドオン「SQLite Maneger」を突っ込んだ。
このアドオンは空のSQLiteファイルを作ることもできるので楽である。
アドオンをインストしたあとに、ツールメニューの SQLite Maneger で起動する。
まずは左上の白紙のボタンを押して新しいDBを作る。保存先はデスクトップなどどこでもOK。
続いてDBに矢印を突っ込んでる「取り込み」ボタンを押して、右のエリアを Import Wizard に切り替える。
あとはさっき修正したmysqldumpのファイル名を指定して、「SQL」を選び、「OK」すればよい。
ダンプ内容にエラーがあれば表示してくれるので、そこを直すこと。
成功すれば左のテーブル一覧「Tables」に、インポートしたテーブルが入っている。
テーブルを選んで「参照と検索」を選べば、テーブルの内容が表示される。
これでSQLiteのファイル作成は完了だ。
このファイルは拡張子に.sqliteとあるが、プロジェクトに組み込む前に.dbに変える。
普通の方法では変わらないことがあるので、Finderの「情報を見る」で確実に拡張子が変わっていることを確認しよう。「情報を見る」の内部でも変更できる。
ちなみに、SQLiteはデータが1ファイルになっているので、
SQLite Maneger で直接中身を見ることもできる。このあたりは実にお手軽だね。
スケールとかいくつかの問題はあるが、適材適所ってことだな。
さてここからはXcodeの作業だ。
iOSにはFMDBというSQLite用のライブラリがある
https://github.com/ccgus/fmdb
ここからzipでダウンロードして解凍すると、中にはいろいろ出てくるが、
メインで使うのはsrc配下のファイルだ。
src配下のfmdb.m以外を全部利用する(fmdb.mはmain.mの入ったサンプルコードの呼び出し元)。
それらを自分のプロジェクトディレクトリにコピーしてAddする。
さらにライブラリとしてlibsqlite3.0.dylibを追加すること。
これは既存のフレームワーク(mapkitとか)と同じ方法で組み込む。
さらに、さっきつくったSQLiteファイルもプロジェクトにコピーして組み込む。拡張子に注意。
あとはDBを使いたいビューなどで下のようにインポート。
#import "FMDatabase.h"
#import "FMDatabaseAdditions.h"
あとは接続してselectなどすればいい。
ここから先はこのページのほうが役立つだろう。
FMDBをつかってiPhoneで簡単にSQLiteを使う
最低限の部分だけコメントを追加して転載
//DBへ接続するメソッド
-(id) dbConnect{
BOOL success;
NSError *error;
NSFileManager *fm = [NSFileManager defaultManager];
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentsDirectory = [paths objectAtIndex:0];
// ここでSQLiteのファイルを指定する
NSString *writableDBPath = [documentsDirectory stringByAppendingPathComponent:@"sample.db"];
NSLog(@"%@",writableDBPath);
success = [fm fileExistsAtPath:writableDBPath];
if(!success){
NSString *defaultDBPath = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent:@"sample.db"];
success = [fm copyItemAtPath:defaultDBPath toPath:writableDBPath error:&error];
if(!success){
NSLog(@"%@",[error localizedDescription]);
}
}
FMDatabase* db = [FMDatabase databaseWithPath:writableDBPath];
return db;
}
実際に呼び出すのはこんな感じ。
// DBに接続する
FMDatabase* db = [self dbConnect];
if ([db open]) {
[db setShouldCacheStatements:YES];
// SELECTするSQLクエリ
FMResultSet *rs = [db executeQuery:@"SELECT * FROM test2 limit 10"];
// 結果を連続処理する
while ([rs next]) {
// 各カラムの内容へアクセスしてログに出力。カラム名は適宜変更すること
NSLog(@"%d %@", [rs intForColumn:@"test2id"], [rs stringForColumn:@"name"]);
}
[rs close];
[db close];
}else{
NSLog(@"Could not open db.");
}
元ページだとINSERTとかも書いてある。是非一読を。
これで、使い慣れたSQLがiOSで動きそうだ。
まあ実際はCoreDataも、中身はSQLite。O/Rマッパーが完全に包んでいるわけだな。
自分の使いやすい方、状況にあった方を使えばよい。開発における選択肢は重要だ。
リファクタリングは自分を成長させる機会でもある。
前向きに行こう。