美文网首页
FMDB 与Sqlite3

FMDB 与Sqlite3

作者: 多_啦啦 | 来源:发表于2016-12-21 16:14 被阅读0次

    初始化数据库

    首先:调用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中参数的顺序一致。

    相关文章

      网友评论

          本文标题:FMDB 与Sqlite3

          本文链接:https://www.haomeiwen.com/subject/ojmqvttx.html