美文网首页
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中参数的顺序一致。

相关文章

  • SQLite3深入浅出

    文章目录: sqlite3 基础语句 sqlite3 API sqlite3 线程安全 FMDB 基础语句: 创建...

  • FMDB 与Sqlite3

    初始化数据库: 首先:调用sqlite3_initialize , 作用:分配资源,初始化一些必要的数据结构; s...

  • iOS原生sqlite3框架操作数据库

    iOS开发的基本上都知道fmdb,自从用了fmdb之后都忘记了原生的sqlite3操作了(fmdb太好用了)。 S...

  • SQLite3 FMDB三方

    Github 地址: FMDB 由于 SQLite3 使用比较麻烦, 所以推荐使用第三方开源库FMDB , 他以 ...

  • 数据库

    SQLite3 : FMDB我自己用 Navicat Premium - 版本v11.1.5 /'næ...

  • FMDB源码系列(二)

    上一篇讲解了FMDB使用的一些宏与Sqlite3错误码,都是FMDB中常用的。这篇我们开始进入源码的解读过程。 F...

  • 【iOS开发】数据存储——SQLite3框架FMDB的使用

    【iOS开发】数据存储——SQLite3框架FMDB的使用 在学习FMDB框架之前,我们首先来大概了解下SQL(S...

  • swift-数据库Sqlite3

    数据库管理的第三方框架 FMDB FMDB将原生的sqlite3封装为Swift函数方法实现 可以通过 : FMD...

  • Swift实现CoreData存储数据

    之前写过一篇介绍iOS数据存储方法的文章,包含:FMDB,SQLite3 ,Core Data,Plist,偏好设...

  • iOS FMDB FTS unknown tokenizer:

    iOS FMDB集成了FTS功能,并且支持icu。icu是sqlite3里支持中文分词的分词器。 unknown ...

网友评论

      本文标题:FMDB 与Sqlite3

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