iPhone上のデータストレージ、sqlite 3---サードパーティフレームワークFMDB
3610 ワード
iPhoneではsqliteを用いてデータストレージを行うのが習慣的です.一般的に他のプラットフォームでもandroidなどのsqliteに慣れています.
iPhoneには、パッケージされたサードパーティ製のフレームワークがいくつかあり、より多くの時間を節約できます.例えば:Sqlitepersistentobjects,FMDB.今日はこの2つのフレームを探して、FMDBのスタイルがもっと私の使用に合っているような気がしますが、実は両者はそれぞれ長所があって、個人の好みを見ているだけです.
FMDatabaseとFMResultSet;
そのうちの
補足:FMDBをインポートした後、iOSのsqlite 3 Framework、libsqlite 3.0.dylibをインポートすることを覚えておいてください.
1、まずFMDatabaseオブジェクトをインスタンス化しなければならない.これはSqlitepersistentobjectsと同じである. サブクラスを派生して操作するのは違います.次にデータベースを開きます(データベースが作成されていない場合)
[cpp] view plain copy
//paths: iosの下のDocumentパス、Documentはiosの読み書き可能なフォルダです
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
//dbPath: データベースパス、Document.
NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"Test.db"];
//データベースインスタンスの作成 db ここで説明します.パスに「Test.db」のファイルが存在しない場合、sqliteは自動的に「Test.db」を作成します.
FMDatabase *db= [FMDatabase databaseWithPath:dbPath] ;
if (![db open]) {
NSLog(@"Could not open db.");
return ;
}
次に、このデータベース・オブジェクトを使用して操作できます.操作は主にupdateとqueriesです.
まず、テーブルの作成です.
[cpp] view plain copy
//Userという名前のテーブルを作成します.stringタイプのName、integerタイプの2つのフィールドがあります. Age
[db executeUpdate:@"CREATE TABLE User (Name text,Age integer)"];
これで私たちは時計を持っています.次に、テーブルを操作します.データを挿入!注意挿入されたデータにはワイルドカードが使用されています.これは、iphoneがsqlite口実を直接使用するバインド変数と同じで、後ろのワイルドカードが一致するデータです.
[c-sharp] view plain copy
//データ挿入OCのタイプを使用 text対応NSString integerはNSNumberの整形に対応
[db executeUpdate:@"INSERT INTO User (Name,Age) VALUES (?,?)",@"女房",[NSNumber] numberWithInt:20]]
次はデータの更新です.
[cpp] view plain copy
//データの更新 「女房」を「ベイビー」に変更
[db executeUpdate:@"UPDATE User SET Name = ? WHERE Name = ? ",@"妻",@"宝贝";
次に、データを削除します.
[c-sharp] view plain copy
//データの削除
[db executeUpdate:@"DELETE FROM User WHERE Name = ?",@"女房
updateの基本的な操作はこれだけで、次はqueriesです!
[c-sharp] view plain copy
//データベースの最初の条件を満たした結果を返す
NSString *aa=[db stringForQuery:@"SELECT Name FROM User WHERE Age = ?",@"20"];
これでクエリーは1つのデータを返しますが、クエリーが複数のデータを返したい場合はどうすればいいですか?心配しないでください.前にFMDBのもう一つの主要なクラス、FMResultSetについて言及しました.これは結果セットです.複数のデータを返すとFMDBはこの結果セットにデータを置き、この結果セットをクエリー操作します!簡単です.
[c-sharp] view plain copy
FMResultSet *rs=[db executeQuery:@"SELECT * FROM User"];
rs=[db executeQuery:@"SELECT * FROM User WHERE Age = ?",@"20"];
while ([rs next]){
NSLog(@"%@ %@",[rs stringForColumn:@"Name"],[rs stringForColumn:@"Age"]);
}
より多くのFMSultSetメソッドは次のとおりです.
具体的にクラスを見ればいい!よし、FMDBの使用はこのようにして、簡単ではないか.実はこのパッケージsqliteのフレームワークはすべて万変してその宗から離れず、sqlをマスターすればいいのだ.
iPhoneには、パッケージされたサードパーティ製のフレームワークがいくつかあり、より多くの時間を節約できます.例えば:Sqlitepersistentobjects,FMDB.今日はこの2つのフレームを探して、FMDBのスタイルがもっと私の使用に合っているような気がしますが、実は両者はそれぞれ長所があって、個人の好みを見ているだけです.
FMDatabaseとFMResultSet;
そのうちの
FMResultSet android sqlite cursor 。
FMDB github ,https://github.com/ccgus/fmdb。
補足:FMDBをインポートした後、iOSのsqlite 3 Framework、libsqlite 3.0.dylibをインポートすることを覚えておいてください.
1、まずFMDatabaseオブジェクトをインスタンス化しなければならない.これはSqlitepersistentobjectsと同じである. サブクラスを派生して操作するのは違います.次にデータベースを開きます(データベースが作成されていない場合)
[cpp] view plain copy
//paths: iosの下のDocumentパス、Documentはiosの読み書き可能なフォルダです
NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentDirectory = [paths objectAtIndex:0];
//dbPath: データベースパス、Document.
NSString *dbPath = [documentDirectory stringByAppendingPathComponent:@"Test.db"];
//データベースインスタンスの作成 db ここで説明します.パスに「Test.db」のファイルが存在しない場合、sqliteは自動的に「Test.db」を作成します.
FMDatabase *db= [FMDatabase databaseWithPath:dbPath] ;
if (![db open]) {
NSLog(@"Could not open db.");
return ;
}
次に、このデータベース・オブジェクトを使用して操作できます.操作は主にupdateとqueriesです.
まず、テーブルの作成です.
[cpp] view plain copy
//Userという名前のテーブルを作成します.stringタイプのName、integerタイプの2つのフィールドがあります. Age
[db executeUpdate:@"CREATE TABLE User (Name text,Age integer)"];
これで私たちは時計を持っています.次に、テーブルを操作します.データを挿入!注意挿入されたデータにはワイルドカードが使用されています.これは、iphoneがsqlite口実を直接使用するバインド変数と同じで、後ろのワイルドカードが一致するデータです.
[c-sharp] view plain copy
//データ挿入OCのタイプを使用 text対応NSString integerはNSNumberの整形に対応
[db executeUpdate:@"INSERT INTO User (Name,Age) VALUES (?,?)",@"女房",[NSNumber] numberWithInt:20]]
次はデータの更新です.
[cpp] view plain copy
//データの更新 「女房」を「ベイビー」に変更
[db executeUpdate:@"UPDATE User SET Name = ? WHERE Name = ? ",@"妻",@"宝贝";
次に、データを削除します.
[c-sharp] view plain copy
//データの削除
[db executeUpdate:@"DELETE FROM User WHERE Name = ?",@"女房
updateの基本的な操作はこれだけで、次はqueriesです!
[c-sharp] view plain copy
//データベースの最初の条件を満たした結果を返す
NSString *aa=[db stringForQuery:@"SELECT Name FROM User WHERE Age = ?",@"20"];
これでクエリーは1つのデータを返しますが、クエリーが複数のデータを返したい場合はどうすればいいですか?心配しないでください.前にFMDBのもう一つの主要なクラス、FMResultSetについて言及しました.これは結果セットです.複数のデータを返すとFMDBはこの結果セットにデータを置き、この結果セットをクエリー操作します!簡単です.
[c-sharp] view plain copy
FMResultSet *rs=[db executeQuery:@"SELECT * FROM User"];
rs=[db executeQuery:@"SELECT * FROM User WHERE Age = ?",@"20"];
while ([rs next]){
NSLog(@"%@ %@",[rs stringForColumn:@"Name"],[rs stringForColumn:@"Age"]);
}
より多くのFMSultSetメソッドは次のとおりです.
intForColumn:
longForColumn:
longLongIntForColumn:
boolForColumn:
doubleForColumn:
stringForColumn:
dateForColumn:
dataForColumn:
dataNoCopyForColumn:
UTF8StringForColumnIndex:
objectForColumn:
具体的にクラスを見ればいい!よし、FMDBの使用はこのようにして、簡単ではないか.実はこのパッケージsqliteのフレームワークはすべて万変してその宗から離れず、sqlをマスターすればいいのだ.