初始化数据库:
首先:调用sqlite3_initialize , 作用:分配资源,初始化一些必要的数据结构;
sqlite3_shutdown,作用:释放由sqlite3_initialize分配的资源;
连接数据库:
通过sqlite3_open_xxx函数连接到名为filename的数据库,并通过参数ppDb返回指向该数据库数据结构的指针
SQLITE_API int SQLITE_STDCALL sqlite3_open(
const char *filename, /* Database filename (UTF-8) */
sqlite3 **ppDb /* OUT: SQLite db handle */
);
参数filename是要连接的SQlite3数据库文件名字符串。
参数ppDb看起来有点复杂,它是一个指向指针的指针。
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数据库文件以只读的方式打开,
如果该数据库文件不存在,则sqlite3_open_v2函数执行失败,返回一个error。
1.2当flags值为SQLITE_OPEN_READWRITE,则SQlite3数据库文件以可读可写的方式打开,
如果该数据库文件本身被操作系统设置为写保护状态,则以只读的方式打开。
如果该数据库文件不存在,则sqlite3_open_v2函数执行失败,返回一个error。
1.3当flags值为SQLITE_OPEN_READWRITE | SQLITE_OPEN_CREATE,则SQlite3数据库文件以可读可写的方式打开,如果该数据库文件不存在则新建一个。
这也是sqlite3_open和sqlite3_open16函数的默认行为。除此之外,flags还可以设置为其他标志,
当调用sqlite3_open_xxx函数时,该函数将分配一个新的SQlite3数据结构,然后初始化,然后将指针ppDb指向它
示例:
int err =sqlite3_open( [self sqlitePath] , (sqlite3**)&_db );
if(err !=SQLITE_OK) {
NSLog(@"error opening!: %d", err);
returnNO;
}
关闭数据库:
在使用完SQlite数据库之后,需要调用sqlite3_close函数关闭数据库连接,释放数据结构所关联的内存,删除所有的临时数据项。
参数符号:
语句参数跟随SQL命令字符串一起传入到sqlite3_prepare函数中,有如下几种:
2.1.1 ? 一个自动索引的匿名参数,如果一条语句中含有多个“?”语句参数,则它们被隐式的赋予索引1,2…
insert into table_day (id, name ) value ( ?, ? );
2.1.2 :<name>
insert into table_day (id, name ) value (:id, ?:name );
在FMBD使用
将模型转为字典/数组;将 字典/数组 传入绑定方法中
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中参数的顺序一致。
网友评论