際際滷

際際滷Share a Scribd company logo
iOSハンズオントレ`ニング
デ`タの喟A晒(SQLite3, NSUserDefaults)

?寄消隠?
SQLite3
アプリMみzみ喘のX楚RDB
トランザクション

ビュ`

トリガ`
聞ってみる
SQLiteはタ`ミナルから軟咾靴泙后タ`
ミナルを軟咾掘sqlite3と澣きます。

.helpと澣いてみよう。
K阻させます。.quitと澣いてみよう。
DBを恬ってみる
DBを旋喘するには、まずDBファイルを恬り、その嶄にさらに
デ`タの秘れ麗にあたるテ`ブル┗蹌を恬撹します。	

DBのファイルを恬るには、さっきのsqlite3に哈方でファイル兆を
局して軟咾垢襪海箸如DBファイルが恬撹されます。	

DBファイル兆は、twitterDB.sqliteとしておきます。タ`ミナルで
仝sqlite3 sampleDB.sqlite々と澣きます。

仝.database々と澣き、恬撹されたDBを_Jします。
テ`ブルを恬ってみる
肝のDDL(Data協x猟)をそのまま澣きます。
CREATE TABLE userinfo (!
'ID' integer,!
'name' text!
);

仝.schema々と澣き、テ`ブルを_Jします。
SQLiteのMみzみ
xCodeのプロジェクトを_き、SQLite3のライブラリ歌孚を弖紗し
ます。

☆ベ`スとなるプロジェクトをダウンロ`ドしてください。

https:/
/github.com/ovjang/NoUseStoryBoard
DBファイルの弖紗
枠ほど恬撹した、SQLiteのDBファイルをプロジェクトに弖紗します。瘁峰、アプリケ`ションバンドルファイルに紗えます。	


!
a怎
アプリケ`ションバンドルファイルとは	


iOSアプリケ`ションをビルドすると、Xcodeはアプリケ`ションをバンドルとしてパッケ`ジ晒します。バンドル とは、vBの
あるリソ`スを1つの侭に鹿めた、ファイルシステム貧のディレクトリです。iOSアプリケ`ションのバンドルには、アプリケ`
ションのg佩辛嬬ファイルと屶址喘リソ`スファイル┘▲廛螢羽`ションアイコン、鮫颯侫.ぅ襦▲踪`カライズされたコンテン
ツなどが根まれています。

アプリケ`ションバンドルファイルは、iめるのか	


Documentsディレクトリは、嶷勣なユ`ザドキュメントやアプリケ`
ションデ`タファイルを隠贋する栽に聞喘します。嶷勣なデ`タと
は、ユ`ザが恬撹した秤鵑如▲▲廛螢羽`ションで伏撹し岷すことが
できないもののことです。

このディレクトリの坪否は、ファイル慌嗤によりユ`ザからのアクセ

スが辛嬬になります。このディレクトリの坪否はiTunesによってバッ
クアップされます。

Libraryディレクトリの塘和には、O協ファイルなどを鯉{します。

Library/Preferencesの塘和に、NSUserDefaultsの秤鵑發海海鳳4罎
れます。
DBのオ`プンクロ`ズ
仟、縫ラスを恬撹します。	

sqlite3.hのインクル`ドします。	

dbのハンドルを鯉{する、メンバ篳を協xします。
//
//
//

sqlite3DB.h

!

#import <Foundation/Foundation.h>
#import <sqlite3.h>

!

@interface sqlite3DB : NSObject {
sqlite3* db_;
}

!

-(void)dbOpen;
-(void)dbClose;

!

@end
アプリのDocumentsフォルダのパスを函誼し、DBファイル兆を根めたフォルダのフルパスを函誼します。	

Documentsフォルダに、DBファイルが贋壓するかチェックし、なければアプリケ`ションバンドル坪のDB
ファイルをコピ`します。	

ファイル	

ふぁいる

☆兜指のみg佩される。アプリのバ`ジョンアップrにも、貧きされない。デ`タは火ることに廣吭。
//
//
//

sqlite3DB.m

!
#import "sqlite3DB.h"
!
@implementation sqlite3DB
!

-(void)dbOpen {
// デ`タベ`スファイルを鯉{するために、Documentsフォルダ`を函誼します。
NSString* docs_path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES) objectAtIndex:0];
// デ`タベ`スファイルのパスを函誼します。
NSString* database_path = [NSString stringWithFormat:@"%@/%@", docs_path, @"sampleDB.sqlite"];
// Documentsフォルダ`にデ`タベ`スファイルが贋壓しているかを_Jします。

!

NSFileManager* manager = [NSFileManager defaultManager];
if (![manager fileExistsAtPath:database_path])
{
NSError* error = nil;
// Documentsフォルダ`に贋壓しない栽は、デ`タベ`スの}u圷をバンドルから函誼します。
NSString* template_path = [[[NSBundle mainBundle] resourcePath]
stringByAppendingPathComponent:database_filename];
// アプリケ`ションバンドルから函誼したデ`タベ`スファイルを猟フォルダ`にコピ`します。
if (![manager copyItemAtPath:template_path toPath:database_path error:&error])
{
// デ`タベ`スファイルのコピ`に払,靴栽のI尖です。
}
}
DBファイルのパスを峺協し、DBをオ`プンします。DBのハンドルを函
誼します。	

ついでに、DBをcloseするメソッドをg廾します。
???
???
???

!

// 猟フォルダ`に喘吭されたデ`タベ`スファイルを_きます。
if (sqlite3_open([database_path UTF8String], &db_) != SQLITE_OK)
{
// デ`タベ`スファイルを SQLite で_くことに払,靴泙靴拭
}

}

!
!

-(void)dbClose {
NSLog(@"DB Close");
if (db_) {
// DB Close
sqlite3_close(db_);
}
db_ = nil;
}
@end

☆歌深?Sqlite3のv方リファレンス?http:/
/www.sqlite.org/c3ref/funclist.html
恬撹したクラスを聞い、DBのオ`プン?クロ`ズを佩います。
- (void)viewDidLoad
{
[super viewDidLoad];
sqlite3DB *sqlite3 = [sqlite3DB new];
[sqlite3 dbOpen];
[sqlite3 dbClose];
}
テ`ブルに、鯣襪譴
SQLを恬撹し、並念にコンパイルしておきます。
sqlite3_stmt* statementInsert_;

!

-(BOOL)prepareSQL {
// SQL猟
NSString* insertSQL

= @"insert into userinfo values (?, ?)";

// SQLのコンパイル
if(sqlite3_prepare_v2(db_, [insertSQL UTF8String], -1, &statementInsert_, NULL) != SQLITE_OK)
{
NSLog( @"Failed to prepare statement with '%s'.", sqlite3_errmsg( db_ ));
return NO;
}
return YES;
}

コンパイルしたSQLに、鯊颪痾zみg佩します。
-(BOOL)usersInfoInsert:(int)id name:(NSString*)name {
// バインド篳のリセット
sqlite3_reset(statementInsert_);
// バインド篳に、離札奪
sqlite3_bind_int(statementInsert_, 1, id);
sqlite3_bind_text(statementInsert_, 2, [name UTF8String], -1, SQLITE_TRANSIENT);
// SQLg佩
int wasSucceeded = sqlite3_step(statementInsert_);
if( wasSucceeded != SQLITE_DONE ) {
NSLog( @"Failed to insert from database with '%s'.", sqlite3_errmsg( db_ ));
return NO;
}
return YES;
}
コンパイルしたSQLを篤します。
-(void)finalizeSQL {
if (db_) {
// PREPAREgみSTATEMENTの
sqlite3_finalize(statementInsert_);
}
}

恬撹したメソッドを聞い、テ`ブルに、Insertします。
- (void)viewDidLoad
{
[super viewDidLoad];
sqlite3DB *sqlite3 = [sqlite3DB new];
[sqlite3 dbOpen];

!
!
}

[sqlite3
[sqlite3
[sqlite3
[sqlite3

prepareSQL];
usersInfoInsert:1 name:@"name1"];
usersInfoInsert:2 name:@"name2"];
finalizeSQL];

[sqlite3 dbClose];
テ`ブルの嶄附を歌孚する
-(void)userInfoSelect {
// k佩するSQL
NSString* selectSQL = [NSString stringWithFormat:@"select * from userinfo"];
// SQLのコンパイル
sqlite3_stmt *statement = nil;
if(sqlite3_prepare_v2(db_, [selectSQL UTF8String], -1, &statement, NULL) == SQLITE_OK) {
@try {
int wasSucceeded = 0;
// 肝の佩が贋壓するr、り、SQLITE_ROWを卦抜する。ないとき、SQLITE_DONEを卦抜する。
do
{
// SQLのg佩(1佩iみzみ)
wasSucceeded = sqlite3_step(statement);
if (wasSucceeded == SQLITE_ROW)
{
// 嶄附のiみ函り
NSLog(@"%d,%@",
(int)sqlite3_column_int(statement, 0),
[NSString stringWithUTF8String:(char*)sqlite3_column_text(statement, 1)]
);
} else if(wasSucceeded == SQLITE_DONE) {
//iみ俳り
} else {
return;
}
} while (wasSucceeded == SQLITE_ROW);
}
@finally {
// PREPAREgみSTATEMENTの
sqlite3_finalize(statement);
}
} else {
// PREPARE払
return;
}
return;
}
恬撹したメソッドを聞い、テ`ブルをSelectします。
- (void)viewDidLoad
{
[super viewDidLoad];
sqlite3DB *sqlite3 = [sqlite3DB new];
[sqlite3 dbOpen];

!

[sqlite3
[sqlite3
[sqlite3
[sqlite3

prepareSQL];
usersInfoInsert:1 name:@"name1"];
usersInfoInsert:2 name:@"name2"];
finalizeSQL];

[sqlite3 userInfoSelect];
[sqlite3 dbClose];
}
NSUserDefaults
O協秤鵑覆匹髻隠贋する喘余に聞う
きzみ、iみzみ、茅の荷恬ができる

侏ごとに荷恬のメソッドがある。
iみきのメソッド
Getting Default Values
1. C?arrayForKey:
2. C?boolForKey:
3. C?dataForKey:
4. C?dictionaryForKey:
5. C?floatForKey:
6. C?integerForKey:
7. C?objectForKey:
8. C?stringArrayForKey:
9. C?stringForKey:
10. C?doubleForKey:
11. C?URLForKey:

Setting Default Values
1.
2.
3.
4.
5.
6.

C?setBool:forKey:
C?setFloat:forKey:
C?setInteger:forKey:
C?setObject:forKey:
C?setDouble:forKey:
C?setURL:forKey:

Removing Defaults

1. C?removeObjectForKey:
NSUserDefaultsの聞い圭
// UserDefaultsの函誼

!

NSUserDefaults *userDefault = [NSUserDefaults standardUserDefaults];

// 函誼

// NSUserDefaultsに隠贋?厚仟する
[userDefault setInteger:1 forKey:@"ID"];

// int侏

[userDefault setObject:@"NAME1" forKey:@"NAME"];

// Object侏

// NSUserDefaultsからデ`タをiみzむ
int id = [userDefault integerForKey:@"ID"];

// int侏として函誼

NSString* name = [userDefault stringForKey:@"NAME"];
NSLog(@"%d,%@",id,name);

// NSString侏として函誼

More Related Content

iOSハンズオントレ`ニング デ`タの喟A晒(SQLite3, NSUserDefaults)