Persistence(8)~SQLite3への保存(2)

2011. 03. 04
iOSアプリケーションでSQLite3を扱う場合の要点を軽く説明します。


●SQLite3を扱う準備

Persistence(7)~SQLite3への保存(1)』で記述していますが、iOSアプリケーションでSQLite3を扱うには、

・プロジェクトへのダイナミックライブラリlibsqlite3.0.dylibの追加
・sqlite3.hのインポート

が必要になります。


●SQLite3の流れ

SQLite3データベースファイルの取り扱いは、以下のような流れになります。

sqlite3_open()データベースファイルを開く
 
sqlite3_prepare()SQLステートメントの準備
 
sqlite3_step()SQLステートメントの評価
 
sqlite3_finalize()SQLステートメントの破棄
 
sqlite3_close()データベースファイルを閉じる

SQLステートメントは、データベースファイル内にあるテーブルへの操作内容を記述する文で、テーブルの作成や行の挿入/置換、値の設定などを行います。

sqlite3_prepare()で操作内容を記述し、sqlite3_step()で操作の実行、sqlite3_finalize()で操作内容の破棄を行います。

また、SQLステートメントの実行部分であるsqlite3_prepare()、sqlite3_step()、sqlite3_finalize()をまとめて行うラッパーとしてsqlite3_exec()に置き換えることができます。

sqlite3_open()データベースファイルを開く
 
sqlite3_exec()SQLステートメントの実行
 
sqlite3_close()データベースファイルを閉じる


●sqlite3_open()

sqlite3_open()は、指定したファイル名のSQLデータベースファイルを開くルーチンで、指定したファイルが無い場合は新規に生成されます。

データベースにアクセスするため、第2引数にsqlite3オブジェクトのポインタを与えます。

sqlite3_open()には、sqlite3_open()、sqlite3_open16()、sqlite3_open_v2()の3種類があります。

idocsq.net/[SQLite3] データベースのオープンとクローズ / sqlite3オブジェクト / 終了コード』によりますと、開こうとするデータベースファイル名のエンコーディングがUTF-8の場合はsqlite3_open()かsqlite3_open_v2()、UTF-16の場合はsqlite3_open16()を使うとあります。

現在はオプション指定ができるsqlite3_open_v2()の使用が推奨されているようですが、ここでは単純なsqlite3_open()を使用します。


●sqlite3_prepare()

sqlite3_prepare()は『CodeZine/SQLiteで“おこづかいちょう” (2/5)』によると、データベースを操作する処理手順を記述したSQLステートメントを事前にコンパイルするルーチンとあります。

第1引数に処理するデータベースのsqlite3オブジェクトのポインタを指定します。

第2引数には操作内容を記述したSQLステートメントを指定します。

第3引数はSQLステートメントのバイト数を指定するのですが、-1と指定することでSQLステートメントがゼロ終端されていると判断され、自分でバイト数を数えなくても自動で割り出されます。

第4引数ではコンパイルしたSQLステートメントの出力先であるsqlite3_stmtのオブジェクトを指定します。
(処理が終わったらsqlite3_finalize()でこのオブジェクトを破棄します)

第5引数はSQLステートメントの未使用部分へのポインタで、SQLステートメントに複数の処理を記述する場合に設定するもので、単一の処理の場合はnilを設定します。

sqlite3_prepare()には、sqlite3_prepare()、sqlite3_prepare_v2()、sqlite3_prepare16()、sqlite3_prepare16_v2()の4種類があります。

指定するSQLステートメントのエンコーディングがUTF-8の場合はsqlite3_prepare()かsqlite3_prepare_v2()を、UTF-16の場合にはsqlite3_prepare16()かsqlite3_prepare16_v2()を使用します。

sqlite3_prepare()とsqlite3_prepare16()は下位互換のための古いルーチンで、現在は新しいsqlite3_prepare_v2()またはsqlite3_prepare16_v2()の使用が推奨されており、ここでもsqlite3_prepare_v2()を使用します。


●sqlite3_step()

sqlite3_step()は、sqlite3_prepare()で生成したコンパイル済みのSQLステートメント(sqlite3_stmtオブジェクト)を実行するルーチンです。

sqlite3_step()は、データベースのテーブルからSQLステートメントの検索条件に合う行を検索し、一行ずつ取り出し処理を行います。

検索条件に合う行が複数ある場合は、SQLITE_ROWが返されて自動的に次の行に進み、無くなった場合はSQLITE_DONEが返されるので、ループ処理の判別に利用できます。


●sqlite3_finalize()

sqlite3_finalize()は、sqlite3_prepare()で生成したSQLステートメント(sqlite3_stmtオブジェクト)を削除します。


●sqlite3_exec()

sqlite3_exec()は、sqlite3_prepare_v2()sqlite3_step()sqlite3_finalize()の3つのルーチンをまとめて一つのルーチンで呼び出すことができるラッパーです。


●sqlite3_close()

sqlite3_close()は、sqlite3_open()で開いたデータベース(sqlite3オブジェクト)を閉じるルーチンです。



参考文献

Second Flush/SQLiteのC/C++インターフェイスの導入

混沌のiPhone開発ブログ(カテゴリー/SQLite3)

idocsq.net/[SQLite3] データベースのオープンとクローズ / sqlite3オブジェクト / 終了コード

CodeZine/SQLiteで“おこづかいちょう” (2/5)






SoundLink Mini Bluetooth speaker_ii
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
05 | 2017/06 | 07
Sun Mon Tue Wed Thu Fri Sat
- - - - 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 29 30 -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

Author:水月杏香
永遠の初心者プログラマ。

Wish List
WACOM


ARC
Technical Q&A
情報プロパティリストキー
Start Developing iOS Apps Today
BOSE

SoundLink Mini Bluetooth speaker_ii
Reference
NSApplicationDelegateプロトコル
NSArrayクラス
NSAutoreleasePoolクラス
NSBundleクラス
NSBundle UIKit追加分
NSCalendarクラス
NSCoderクラス
NSCodingプロトコル
NSCopyingプロトコル
NSDataクラス
NSDateクラス
NSDateFormatterクラス
NSDictionaryクラス
NSEntityDescriptionクラス
NSEnumeratorクラス
NSErrorクラス
NSExceptionクラス
NSFetchRequestクラス
NSFileHandleクラス
NSFileManagerクラス
NSIndexPathクラス
NSIndexPath UIKit追加分
NSKeyedArchiverクラス
NSKeyedUnarchiverクラス
NSKeyValueCodingプロトコル
NSLocaleクラス
NSManagedObjectクラス
NSManagedObjectContextクラス
NSManagedObjectModelクラス
NSMutableArrayクラス
NSMutableCopyingプロトコル
NSMutableDictionaryクラス
NSMutableSetクラス
NSNotificationクラス
NSNotificationCenterクラス
NSNullクラス
NSNumberクラス
NSObjectクラス
NSObject UIKit追加分
NSObjectプロトコル
NSPersistentStoreクラス
NSPersistentStoreCoordinatorクラス
NSPredicateクラス
NSPropertyListSerializationクラス
NSRunLoopクラス
NSSetクラス
NSStringクラス
NSString UIKit追加分
NSTimerクラス
NSTimeZoneクラス
NSURLクラス
NSURLProtectionSpaceクラス
NSURLRequestクラス
NSUserDefaultsクラス
NSValueクラス

UIActionSheetクラス
UIActionSheetDelegateプロトコル
UIActivityIndicatorViewクラス
UIAlertViewクラス
UIAlertViewDelegateプロトコル
UIApplicationクラス
UIApplicationDelegateプロトコル
UIBarButtonItemクラス
UIBarItemクラス
UIButtonクラス
UIColorクラス
UIControlクラス
UIDatePickerクラス
UIDeviceクラス
UIEventクラス
UIFontクラス
UIGestureRecognizerクラス
UIImageクラス
UIImageViewクラス
UIKit Function
UILabelクラス
UINavigationControllerクラス
UINavigationItemクラス
UIPickerViewクラス
UIPickerViewDataSourceプロトコル
UIPickerViewDelegateプロトコル
UIPinchGestureRecognizerクラス
UIResponderクラス
UIScreenクラス
UIScrollViewクラス
UISearchBarクラス
UISearchBarDelegateプロトコル
UISegmentedControlクラス
UISliderクラス
UISwipeGestureRecognizerクラス
UISwitchクラス
UITableViewクラス
UITableViewCellクラス
UITableViewControllerクラス
UITableViewDataSourceプロトコル
UITableViewDelegateプロトコル
UITapGestureRecognizerクラス
UITextFieldクラス
UITextFieldDelegateプロトコル
UITextInputTraitsプロトコル
UITextViewクラス
UITextViewDelegateプロトコル
UIToolbarクラス
UITouchクラス
UIViewクラス
UIViewControllerクラス
UIWebViewクラス
UIWebViewDelegateプロトコル
UIWindowクラス

AVAudioPlayerクラス
AVAudioPlayerDelegateプロトコル

CADisplayLinkクラス
CAEAGLLayerクラス
CALayerクラス

CGAffineTransform
CGBitmapContext
CGColor
CGColorSpace
CGContext
CGGeometry
CGImage
CGPath

EAGLContextクラス
EAGLDrawableプロトコル

Foundation Constants
Foundation Data Types
Foundation Functions

MPMediaItemクラス
MPMediaItemArtworkクラス
MPMediaPlaylistクラス
MPMediaPropertyPredicateクラス
MPMediaQueryクラス
MPMusicPlayerControllerクラス

Randomization Services

System Sound Services
Amazon


OpenGL ES
SQLite
Monthly Archives
Recent Comments
Recent TrackBacks
RSS Link
Visitors
QR Code
QR