SQLステートメントの評価

2011. 02. 19
int sqlite3_step(sqlite3_stmt*);

sqlite3_prepare_v2()またはsqlite3_prepare16_v2()のどちらか、あるいは従来のsqlite3_prepare()またはsqlite3_prepare16()を使用して、prepared statementの準備ができたら、この関数を1回以上呼び出してステートメントの評価を行う必要があります。

sqlite3_step()インターフェイスの動作の詳細については、ステートメントの準備に新しい『v2』インターフェイスのsqlite3_prepare_v2()sqlite3_prepare16_v2()か、古い従来のインターフェイスsqlite3_prepare()sqlite3_prepare16()のどちらを使用したかに依存します。

新しいアプリケーションでは新しい『v2』インターフェイスの使用を推奨しますが、サポートの継続には従来のインターフェイスを使用してください。

従来のインターフェイスの戻り値はSQLITE_BUSYSQLITE_DONESQLITE_ROWSQLITE_ERROR、またはSQLITE_MISUSEのいずれかになります。

『v2』インターフェイスは、更にその他のresult codesextended result codesも返します。

SQLITE_BUSYは、データベースエンジンを取得しようとした際に、データベースがジョブを実行する必要があるためにロックされていることを表します。

ステートメントがCOMMITまたは明示的なトランザクションの外部で発生した場合は、ステートメントの再試行を行うことができます。

ステートメントがCOMMITではなく、明示的なトランザクションの内部で発生した場合は、継続する前にトランザクションをロールバックする必要があります。

SQLITE_DONEは、ステートメントの実行が正常に完了したことを表します。

sqlite3_step()は仮想マシンを初期状態に戻す最初のsqlite3_reset()の呼び出しによるリセットを除いて、この仮想マシン上で再度呼び出す必要はありません。

SQLステートメントが実行した際に任意のデータを返す場合、SQLITE_ROWはデータの新しい行が呼び出し元による処理のために準備される度に返します。

値はcolumn access functionsを使用してアクセスすることができます。

sqlite3_step()はデータの次の行を取得するために再度呼び出されます。

SQLITE_ERRORは、(制約違反などの)ランタイムエラーが発生したことを表します。

sqlite3_step()は仮想マシン上で再度呼び出す必要はありません。

詳細な情報は、sqlite3_errmsg()を呼び出すことによって見つけることができます。

従来のインターフェイスでは、より具体的なエラーコード(例えばSQLITE_INTERUPTSQLITE_SCHEMASQLITE_CORRUPTなど)を、prepared statement上でsqlite3_reset()を呼び出すことによって取得することができます。

『v2』インターフェイスでは、より具体的なエラーコードはsqlite3_step()が直接返します。

SQLITE_MISUSEは、このルーチンが不正確に呼ばれたことを意味します。

おそらくprepared statement上で呼び出された際に、既にfinalizedまたはSQLITE_ERRORSQLITE_DONEが事前に返されています。

もしくは、同じデータベース接続が同時に2つ以上のスレッドを使用した可能性があります。

SQLiteの3.6.23.1までの全てのバージョンでは、sqlite3_step()が後続を呼び出す前に、sqlite3_step()がSQLITE_ROW以外を返した後で、sqlite3_reset()を呼び出す必要がありました。

sqlite3_reset()を使用した準備ステートメントのリセットが失敗すると、sqlite3_step()からSQLITE_MISUSEが返ってくるでしょう。

しかし3.6.23.1より後のバージョンでは、この状況下の場合にSQLITE_MISUSEを返すのではなく、sqlite3_step()は自動的にsqlite3_reset()を呼び出し始めます。

SQLITE_MISUSEエラーを受信する全てのアプリケーションは常に定義によって破棄されるので、互換性の破棄とはみなされません。

SQLITE_OMIT_AUTORESETはコンパイル時のオプションで、従来の動作を復元するために使用することができます。

ばかげたインターフェイスの警告:

従来のインターフェイスでsqlite3_step() APIは、SQLITE_BUSYSQLITE_MISUSE以外の全てのエラーは、常に一般的なエラーコードSQLITE_ERRORを返していました。

より詳細な特定のerror codesを見いだすためには、sqlite3_reset()またはsqlite3_finalize()を呼び出す必要がありました。

我々はこのばかげた設計を認識しています。

この問題は『v2』インターフェイスで修正しています。

全てのSQLステートメントの準備に、従来のsqlite3_prepare()sqlite3_prepare16()インターフェイスの代わりに、sqlite3_prepare_v2()またはsqlite3_prepare16_v2()のどちらかを使用すると、sqlite3_step()によってより特定されたerror codesが直接返されます。

『v2』インターフェイスの使用を推奨します。

ObjectsConstantsFunctionsの一覧を参照してください。



参考文献

Evaluate An SQL Statement

0 CommentsPosted in SQLite





Wave SoundTouch music system IV
0 Comments
Leave a comment
管理者にだけ表示を許可する
Top
0 Trackbacks
Top
Calendar
06 | 2017/07 | 08
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 31 - - - - -
Recent Articles
iTunes


Swift
Categories
Tips
Profile

水月杏香

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

Wish List
WACOM


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

Wave SoundTouch music system IV
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