【iOS機能実現】の:FMBBを使ってSQLiteに接続する
前言
http://blog.devtang.com/blog/2012/04/22/use-fmdb/
SQLite(http://www.sqlite.org/docs.html)は軽量級の関係データベースです.iOS SDKは早くからSQLiteをサポートしていますが、使う時はlibsqlite 3.dylib依存とsqlite 3.hヘッダファイルの導入だけでいいです.しかし、元のSQLite APIは使用上はかなり友好的ではなく、使用時には非常に不便です.したがって、オープンソースコミュニティにはSQLite APIをパッケージ化する一連のライブラリが出現し、FMB(SQLite API)は、https://github.com/ccgus/fmdb)はコミュニティの中の優秀者です.
FMBBは使用にとても便利です.以下は簡単な例です.
使用説明
この使用説明書は主にfmdbのgithubプロジェクト説明書から翻訳します. https://github.com/ccgus/fmdb
関連ファイルをインポート
まずFMDBをgithubからcloneして、次のファイルのcopyをあなたのプロジェクトに送ります.
データベースを作成するには、次の行だけでいいです.ファイルが存在しない場合、fmdbは自分で作成します.もしあなたが入ってきたパラメータが空の列であれば、fmdbは一時ファイルディレクトリの下でこのデータベースを作成します.もしあなたが入ってきたパラメータがNULLであれば、メモリ内のデータベースを構築します.
次のような文を使います.もし開けられなかったら、権限が足りなかったり、リソースが足りなかったりするかもしれません.通常の操作が完了すると、クローズドメソッドを呼び出してデータベースを閉じる必要があります.
Select操作以外は更新操作です.更新操作には以下の方法があります.エラーがあったら、errorパラメータで取得できます.
クエリーの操作例は以下の通りです.操作結果が1行であっても、FMreesult Setのnextメソッドを呼び出す必要があります.
データパラメータ
通常の状況では、SQLの標準文を使ってもいいですか?ステートメントを実行するパラメータを表します.
もし私たちのアプリがマルチスレッドのオペレーティングデータベースを必要とするなら、FMDataseQueを使ってスレッドの安全を保証する必要があります.複数のスレッドで同じFMDatabaseオブジェクトを同時に使用することはできません.このクラス自体はスレッドの安全ではありません.このように使うとデータが混乱するなどの問題があります.
FMDathabaseQueを使うのは簡単です.まず一つのデータベースファイルのアドレスを使って、FMDathabaseQueを初めて使用して、一つのクローズドをinDatabase方法に導入することができます.クローズド中でデータベースを操作して、直接FMDabrateの管理に参加しません.
Sqliteのデータを見るためには、良いグラフィックスインターフェースのデータベース管理プログラムが必要です.mysqlはphpMyAdminがありますが、sqliteは?
私は主にFirefoxのSQLite Managerというプラグインを使っていますが、このプラグインをインストールすると、接尾語のデータベースファイルを直接開くことができます.SQLite Managerはグラフィカルなインターフェースを提供して、データクエリまたは変更操作を実行します.下図のように:
締め括りをつける
FMBBはSQLite APIを友好的にパッケージ化し、使用上非常に便利であり、純Sqlite APIを使用してデータベース操作を行うappに対しては、FMBBベースに移行することが考えられ、これは今後のデータベース関連機能の開発維持に対して、多くの効果を高めることができる.
fmdbを勉強している間に、小さいプロジェクトをして練習に使いました.興味のあるものは自分でダウンロードできます.https://github.com/tangqiaoboy/FmdbSample
皆さん、楽しんでください.
Posted by 唐の巧妙 アプリ22 nd、2012 iOS
オリジナル文章、著作権声明:自由転載-非商用-非派生-署名を保持する Creative Commons BY-NC-ND 3.0
自己テストプログラム
癜import
噫import「FMDabrate.h」
葃import「FMDathabase Additions.h」
皱import「FMDathabase Pool.h」
噫import「FMDathable Que.h」
int main(int argc、const char*argv[])
{
@autreleasepool{
//insert code here…
NSLog(@「ハロー、ワールド!」)
NSFileManager*filemgr;
NSString*currentpath;
filemgr=[NSFileManagerallo]init]
currentpath=[filemgrerent DirectoryPath]
//NSLog(@'@,currentpath);
NSString*dbpath = [currentpath strigByApple PathComponent:@「I 3 D B.db 3」;
FMDathabase*db=[FMDathabasedateabasewith:dbpath]
if(db==NULL)
{
NSLog(@"Create DB failed!")
}
[dbopen]
FMusesult Set*rs=[dbexecuteQuery:@「select*from Tab MHz where id=1」
while([rs next]){
NSLog(@@)、[rstringForColumn:@work]
}
[dbclose]
}
return 0;
)データの置く位置に注意して、debugディレクトリの下にあります.
http://blog.devtang.com/blog/2012/04/22/use-fmdb/
SQLite(http://www.sqlite.org/docs.html)は軽量級の関係データベースです.iOS SDKは早くからSQLiteをサポートしていますが、使う時はlibsqlite 3.dylib依存とsqlite 3.hヘッダファイルの導入だけでいいです.しかし、元のSQLite APIは使用上はかなり友好的ではなく、使用時には非常に不便です.したがって、オープンソースコミュニティにはSQLite APIをパッケージ化する一連のライブラリが出現し、FMB(SQLite API)は、https://github.com/ccgus/fmdb)はコミュニティの中の優秀者です.
FMBBは使用にとても便利です.以下は簡単な例です.
1
2
3
4
5
6
7
8
9
10
11
NSString* docsdir = [NSSearchPathForDirectoriesInDomains( NSDocumentDirectory, NSUserDomainMask, YES) lastObject]; NSString* dbpath = [docsdir stringByAppendingPathComponent:@"user.sqlite"]; FMDatabase* db = [FMDatabase databaseWithPath:dbpath]; [db open]; FMResultSet *rs = [db executeQuery:@"select * from people"]; while ([rs next]) { NSLog(@"%@ %@", [rs stringForColumn:@"firstname"], [rs stringForColumn:@"lastname"]); } [db close];
FMBBを使用した後のデータベースコードは明らかで、元のAPIよりずっと優雅です.また、FMDBはARCと非ARCの両方に対応しており、工程構成に応じてメモリ管理コードを自動的に調整しています.使用説明
この使用説明書は主にfmdbのgithubプロジェクト説明書から翻訳します. https://github.com/ccgus/fmdb
関連ファイルをインポート
まずFMDBをgithubからcloneして、次のファイルのcopyをあなたのプロジェクトに送ります.
1
2
3
4
5
6
7
8
9
10
FMDatabase.h FMDatabase.m FMDatabaseAdditions.h FMDatabaseAdditions.m FMDatabasePool.h FMDatabasePool.m FMDatabaseQueue.h FMDatabaseQueue.m FMResultSet.h FMResultSet.m
データベースを作成データベースを作成するには、次の行だけでいいです.ファイルが存在しない場合、fmdbは自分で作成します.もしあなたが入ってきたパラメータが空の列であれば、fmdbは一時ファイルディレクトリの下でこのデータベースを作成します.もしあなたが入ってきたパラメータがNULLであれば、メモリ内のデータベースを構築します.
1
FMDatabase *db = [FMDatabase databaseWithPath:@"/tmp/tmp.db"];
データベースを開く次のような文を使います.もし開けられなかったら、権限が足りなかったり、リソースが足りなかったりするかもしれません.通常の操作が完了すると、クローズドメソッドを呼び出してデータベースを閉じる必要があります.
1
2
3
4
5
6
7
8
if (![db open]) { // error return; } // some operation // ... [db close];
更新操作を実行Select操作以外は更新操作です.更新操作には以下の方法があります.エラーがあったら、errorパラメータで取得できます.
1
-[FMDatabase executeUpdate:error:withArgumentsInArray:orVAList:]
クエリー操作を実行クエリーの操作例は以下の通りです.操作結果が1行であっても、FMreesult Setのnextメソッドを呼び出す必要があります.
1
2
3
4
5
6
7
8
9
FMResultSet *s = [db executeQuery:@"SELECT * FROM myTable"]; while ([s next]) { //retrieve values for each record } FMResultSet *s = [db executeQuery:@"SELECT COUNT(*) FROM myTable"]; if ([s next]) { int totalCount = [s intForColumnIndex:0]; }
FMBBは、異なるタイプのデータを取得するための複数の方法を提供する.1
2
3
4
5
6
7
8
9
10
11
intForColumn: longForColumn: longLongIntForColumn: boolForColumn: doubleForColumn: stringForColumn: dateForColumn: dataForColumn: dataNoCopyForColumn: UTF8StringForColumnIndex: objectForColumn:
通常はFMRI esult Setを閉じる必要はありません.関連するデータベースがオフになるとFMrsesult Setも自動的にオフになります.データパラメータ
通常の状況では、SQLの標準文を使ってもいいですか?ステートメントを実行するパラメータを表します.
1
INSERT INTO myTable VALUES (?, ?, ?)
その後、我々はexecuteUpdate方法を呼び出すことができますか?具体的なパラメーターが入ってくると、通常は変長パラメータで伝えられます.1
2
NSString *sql = @"insert into User (name, password) values (?, ?)"; [db executeUpdate:sql, user.name, user.password];
ここで注意したいのは、パラメータはNSObjectのサブクラスである必要がありますので、int、double、bookという基本的なタイプは、対応するパッケージ類にカプセル化する必要があります.1
2
3
4
// ,42 [db executeUpdate:@"INSERT INTO myTable VALUES (?)", 42]; // , 42 NSNumber [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:42]];
スレッドの安全もし私たちのアプリがマルチスレッドのオペレーティングデータベースを必要とするなら、FMDataseQueを使ってスレッドの安全を保証する必要があります.複数のスレッドで同じFMDatabaseオブジェクトを同時に使用することはできません.このクラス自体はスレッドの安全ではありません.このように使うとデータが混乱するなどの問題があります.
FMDathabaseQueを使うのは簡単です.まず一つのデータベースファイルのアドレスを使って、FMDathabaseQueを初めて使用して、一つのクローズドをinDatabase方法に導入することができます.クローズド中でデータベースを操作して、直接FMDabrateの管理に参加しません.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
// , FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:aPath]; // [queue inDatabase:^(FMDatabase *db) { [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]]; [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]]; [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]]; FMResultSet *rs = [db executeQuery:@"select * from foo"]; while ([rs next]) { // … } }]; // [queue inTransaction:^(FMDatabase *db, BOOL *rollback) { [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:1]]; [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:2]]; [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:3]]; if (whoopsSomethingWrongHappened) { *rollback = YES; return; } // etc… [db executeUpdate:@"INSERT INTO myTable VALUES (?)", [NSNumber numberWithInt:4]]; }];
ツールSqliteのデータを見るためには、良いグラフィックスインターフェースのデータベース管理プログラムが必要です.mysqlはphpMyAdminがありますが、sqliteは?
私は主にFirefoxのSQLite Managerというプラグインを使っていますが、このプラグインをインストールすると、接尾語のデータベースファイルを直接開くことができます.SQLite Managerはグラフィカルなインターフェースを提供して、データクエリまたは変更操作を実行します.下図のように:
締め括りをつける
FMBBはSQLite APIを友好的にパッケージ化し、使用上非常に便利であり、純Sqlite APIを使用してデータベース操作を行うappに対しては、FMBBベースに移行することが考えられ、これは今後のデータベース関連機能の開発維持に対して、多くの効果を高めることができる.
fmdbを勉強している間に、小さいプロジェクトをして練習に使いました.興味のあるものは自分でダウンロードできます.https://github.com/tangqiaoboy/FmdbSample
皆さん、楽しんでください.
Posted by 唐の巧妙 アプリ22 nd、2012 iOS
オリジナル文章、著作権声明:自由転載-非商用-非派生-署名を保持する Creative Commons BY-NC-ND 3.0
自己テストプログラム
癜import
噫import「FMDabrate.h」
葃import「FMDathabase Additions.h」
皱import「FMDathabase Pool.h」
噫import「FMDathable Que.h」
int main(int argc、const char*argv[])
{
@autreleasepool{
//insert code here…
NSLog(@「ハロー、ワールド!」)
NSFileManager*filemgr;
NSString*currentpath;
filemgr=[NSFileManagerallo]init]
currentpath=[filemgrerent DirectoryPath]
//NSLog(@'@,currentpath);
NSString*dbpath = [currentpath strigByApple PathComponent:@「I 3 D B.db 3」;
FMDathabase*db=[FMDathabasedateabasewith:dbpath]
if(db==NULL)
{
NSLog(@"Create DB failed!")
}
[dbopen]
FMusesult Set*rs=[dbexecuteQuery:@「select*from Tab MHz where id=1」
while([rs next]){
NSLog(@@)、[rstringForColumn:@work]
}
[dbclose]
}
return 0;
)データの置く位置に注意して、debugディレクトリの下にあります.