初始化數(shù)據(jù)庫:
首先:調(diào)用sqlite3_initialize , 作用:分配資源谣殊,初始化一些必要的數(shù)據(jù)結(jié)構(gòu)豌研;
sqlite3_shutdown,作用:釋放由sqlite3_initialize分配的資源珊膜;
連接數(shù)據(jù)庫:
通過sqlite3_open_xxx函數(shù)連接到名為filename的數(shù)據(jù)庫点弯,并通過參數(shù)ppDb返回指向該數(shù)據(jù)庫數(shù)據(jù)結(jié)構(gòu)的指針
SQLITE_API int SQLITE_STDCALL sqlite3_open(
const char *filename, ? ? ? ? ? ? ? ? /* Database filename (UTF-8) */
sqlite3 **ppDb ? ? ? ? ? ? ? ? ? ? ? ? ?/* OUT: SQLite db handle */
);
參數(shù)filename是要連接的SQlite3數(shù)據(jù)庫文件名字符串。
參數(shù)ppDb看起來有點復(fù)雜,它是一個指向指針的指針。
SQLITE_API int SQLITE_STDCALL sqlite3_open16(
const void *filename, ? ? ?/* Database filename (UTF-16) */
sqlite3** ppDb ? ? ? ? ? ? ?/* OUT: SQLite db handle */
);
SQLITE_API int SQLITE_STDCALL sqlite3_open_v2(
const ?char ?*filename, ? ? ? ? ?/* Database filename (UTF-8) */
sqlite3 ?**ppDb, ? ? ? ? ? ? ? ? ? /* OUT: SQLite db handle */
int flags, ? ? ? ? ? ? ? ? ? ? ? ? ? ? /* Flags */
const ? char ? *zVfs ? ? ? ? ? /* Name of VFS module to use */
);
1.1當flags值為SQLITE_OPEN_READONLY,表示:SQlite3數(shù)據(jù)庫文件以只讀的方式打開加匈,
如果該數(shù)據(jù)庫文件不存在,則sqlite3_open_v2函數(shù)執(zhí)行失敗仑荐,返回一個error雕拼。
1.2當flags值為SQLITE_OPEN_READWRITE,則SQlite3數(shù)據(jù)庫文件以可讀可寫的方式打開粘招,
如果該數(shù)據(jù)庫文件本身被操作系統(tǒng)設(shè)置為寫保護狀態(tài)啥寇,則以只讀的方式打開。
如果該數(shù)據(jù)庫文件不存在洒扎,則sqlite3_open_v2函數(shù)執(zhí)行失敗辑甜,返回一個error。
1.3當flags值為SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE袍冷,則SQlite3數(shù)據(jù)庫文件以可讀可寫的方式打開磷醋,如果該數(shù)據(jù)庫文件不存在則新建一個。
這也是sqlite3_open和sqlite3_open16函數(shù)的默認行為胡诗。除此之外子檀,flags還可以設(shè)置為其他標志,
當調(diào)用sqlite3_open_xxx函數(shù)時乃戈,該函數(shù)將分配一個新的SQlite3數(shù)據(jù)結(jié)構(gòu),然后初始化亩进,然后將指針ppDb指向它
示例:
int ?err =sqlite3_open( [self ?sqlitePath] , ?(sqlite3**)&_db );
if(err !=SQLITE_OK) {
NSLog(@"error opening!: %d", err);
returnNO;
}
關(guān)閉數(shù)據(jù)庫:
在使用完SQlite數(shù)據(jù)庫之后症虑,需要調(diào)用sqlite3_close函數(shù)關(guān)閉數(shù)據(jù)庫連接,釋放數(shù)據(jù)結(jié)構(gòu)所關(guān)聯(lián)的內(nèi)存归薛,刪除所有的臨時數(shù)據(jù)項谍憔。
參數(shù)符號:
語句參數(shù)跟隨SQL命令字符串一起傳入到sqlite3_prepare函數(shù)中,有如下幾種:
2.1.1 ? ? ?主籍? 一個自動索引的匿名參數(shù)习贫,如果一條語句中含有多個“?”語句參數(shù),則它們被隱式的賦予索引1,2…
insert into table_day ?(id, name ) value ( ?, ? );
2.1.2 ? ? :<name>
insert into table_day? (id, name ) value (:id, ?:name );
在FMBD使用
將模型轉(zhuǎn)為字典/數(shù)組千元;將 字典/數(shù)組 傳入綁定方法中
NSDictionary*dic =@{@"productId":@"123",@"serviceId":@"456",@"userId":@"789"};
NSString*sql =@"insert into t_notesCurrentDay (productId, serviceId, userId) values( :productId, ?:serviceId, :userId );";
BOOL isSuccess = [db executeUpdate: sql withParameterDictionary: dic];
if(isSuccess) {
NSLog(@"success");
}else{
NSLog(@"error");
}
NSArray *array =@[@"123112", @"456", @"789"];
NSString* sql =@"insert into t_notesCurrentDay (productId, serviceId, userId) values(?, ?, ? );";
BOOL isSuccess = [db executeUpdate: sql withArgumentsInArray: array];
if(isSuccess) {
NSLog(@"success");
}else{
NSLog(@"error");
}
注意:array中的元素的順序與sql中參數(shù)的順序一致苫昌。