FMDB 与Sqlite3

初始化数据库

首先:调用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     :

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中参数的顺序一致。

你可能感兴趣的:(FMDB 与Sqlite3)