iOS sqlite

使用sqlite数据库

我想写一篇文章来将数据库基础的东西整理一下,作为新手,学过去不用马上就会忘了,我想忘了的时候拿出来一看就能懂,马上回忆起来。

xcode库:

在sqlite操作的类中需要导入

#import <sqlite3.h>

sqlite数据类型

  • integer 带符号的整数类型;
  • real  浮点类型
  • text 字符串类型
  • blob 二进制大对象类型,能够存放任何二进制数据。

sql中只有这四种数据类型,当需要其他类型如时间类型时,需要用上述类型来替换,比如text类型;

sqlite常用函数

以下代码中的变量声明:

static sqlite3 *sqliteDB;
NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:@"baidumap.sqlite"];//将数据库放在该目录下
sqlite3_stmt *stmt;//语句对象

sqlite3_stmt
语句对象(数据库操作语句的对象,用来操作sql语句的)

用sqlite3_prepare_v2将sql语句转为二进制语句,绑定操作等都需要用到

sqlite3函数为纯C语言函数,在调用时,特别是传参时注意类型的转换。

sqlite3_open 函数打开数据库。(操作数据库前先打开数据)

第一个参数是数据库文件的完整路径 是一个char*的UTF-8类型的数据,第二个参数是sqlite指针变量的地址;返回类型是int
类型;

int result = sqlite3_open(filename.UTF8String, &sqliteDB);

sqlite3_exec函数执行sql语句。(进行建表、插入、删除等sql语句都可以用该函数运行)

第一个参数是sqlite3指针变量的地址,第二个参数是要执行的sql语句(注意类型转换),第三个参数是要回调的函数,第四个
参数是要回调函数的参数,第五个参数是要执行出错的字符串。

 int result = sqlite3_exec(sqliteDB, sqlchar, NULL, NULL, &errorMesg);

sqlite3_close函数释放资源。

原则上无论正常还是异常结束,必须使用改函数来sqlite3释放资源;

sqlite3_close(sqliteDB);

sqlite3_prepare_v2函数预处理sql语句。

预处理的目的是将sql编译成二进制代码,提高sql语句的执行速度。

第一个参数是sqlite3数据库,第二个参数是sql语句,第三个参数是sql语句字符串的长度(填写-1即可),第四个参数是
sqlite3_stmt指针的地址,第五个参数是sql没有执行的部分语句。

 int result = sqlite3_prepare_v2(sqliteDB, sql , -1, &stmt, NULL);

sqlite3_bind_text函数用来绑定文本参数。(如果sql语句中带有?,则这个问号为占位符,就需要词函数来绑定参数)

sqlite3_bind_int函数用来绑定整型参数。

sqlite3_bind_double函数用来绑定浮点参数。

sqlite3_bind_blob函数用来绑定二进制参数。

。。。。。。

第一个参数是sqlite3_stmt指针的类型的参数,第二个参数为序号(从1开始),第三个参数为字符串,第四个是字符串的长
度,第五个参数是一个函数指针。

sqlite3_bind_text(stmt, 1, startime.UTF8String, -1, NULL);

sqlite3_step函数执行sql语句,遍历结果集。(例如查询语句查询出20条数据后,需要用该函数来一条一条的遍历取出)

参数为sqlite3_stmt指针,返回int类型;

sqlite3_step(stmt)

下面是一类函数用来取值(例如取出当前这行数据中得第n个字段中得值需要用到此函数)

sqlite3_column_text 函数提取第n个字段中的字符串数据。

sqlite3_column_blob 函数提取第n个字段中的二进制数据。

sqlite3_column_double 函数提取第n个字段中的浮点型数据。

sqlite3_column_int
函数提取第n个字段中的整型数据。

sqlite3_column_int64 函数提取第n个字段中的64位整型数据。

sqlite3_column_text16 函数提取第n个字段中的长度为16的text数据。

NSNumber *latitude = [NSNumber numberWithFloat: sqlite3_column_int(stmt, 0)];
            NSNumber *longetude = [NSNumber numberWithFloat: sqlite3_column_int(stmt, 1)];

sqlite3_finalize 函数用来删除sqlite3_stmt 对象(当上文中声明了sqlite3_stmt对象时调用)

sqlite3_finalize(stmt);

例子

下面附加上一个查询函数用来总结一下这些函数总的用法

+ (NSMutableArray *)query:(NSString *)startime :(NSString *)endtime
{
    //打开数据库
    NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]stringByAppendingPathComponent:@"baidumap.sqlite"];
    int result = sqlite3_open(filename.UTF8String, &sqliteDB);

    if (result == SQLITE_OK) {
        NSLog(@"打开数据库成功");

        //sql语句
        NSString *sqlstr = @"SELECT latitude,longetude FROM location_record WHERE time > ? AND time < ?";
        //类型转换
        const char *sql = sqlstr.UTF8String;
        //初始化语句对象
        sqlite3_stmt *stmt;
        //sql语句预处理
        result = sqlite3_prepare_v2(sqliteDB, sql , -1, &stmt, NULL);
        //初始化查询结果语句
        NSMutableArray *locationArray = [NSMutableArray array];

        if (result == SQLITE_OK) {
            //对sql语句中的?进行参数绑定
            sqlite3_bind_text(stmt, 1, startime.UTF8String, -1, NULL);
            sqlite3_bind_text(stmt, 2, startime.UTF8String,-1 , NULL);
            while (sqlite3_step(stmt) == SQLITE_ROW)
            {
                //获取字段值
                NSNumber *latitude = [NSNumber numberWithFloat: sqlite3_column_int(stmt, 0)];
                NSNumber *longetude = [NSNumber numberWithFloat: sqlite3_column_int(stmt, 1)];
                //保存到数组
                [locationArray addObject:latitude];
                [locationArray addObject:longetude];
            }
        }
        //删除语句对象
        sqlite3_finalize(stmt);
        //关闭数据库
        sqlite3_close(sqliteDB);
        return locationArray;
    }
    else
    {
        NSLog(@"打开失败");
        //关闭数据库
        sqlite3_close(sqliteDB);
        return nil;
    }
}
时间: 2024-08-10 21:28:16

iOS sqlite的相关文章

iOS sqlite数据库实现(转)

转载自:http://www.cnblogs.com/macroxu-1982/archive/2012/10/01/2709960.html 1 实现过程添加libsqlite3组件 选择项目后,在展示的xcodepro文件配置界面中配置 build phases -> Link Binary With Libraries -->+ -->libsqlite3.dylib 2 在当前项目中添加sqlite 数据库 3 实现app运行时,将sqlite文件复制到沙盒中 4 实现查询数据库

IOS SQLite数据库

简介 在IOS中使用Sqlite来处理数据.如果你已经了解了SQL,那你可以很容易的掌握SQLite数据库的操作. 实例步骤 1.创建一个简单的View based application 2.选择项目文件,然后选择目标,添加libsqlite3.dylib库到选择框架 3.通过选择" File-> New -> File... -> "选择 Objective C class 创建新文件,单击下一步 4."sub class of"为NSObje

iOS SQLite使用

数据库的特征: 以一定方式存储在一起 能为多个用户分享 具有尽可能少的冗余代码 与程序彼此独立的数据集 SQLite SQLite是一个轻量级关系数据库,最初的设计目标是用于嵌入式系统,它占用资源非常少.在iOS中,只需要加入li'blibsqlite3.0依赖以及引入sqlite3.h头文件即可. SQLite是无类型的数据库,可以保存任何类型的数据,对于SQLite来说对字段不指定类型是完全有效的 SQLite近似类似规则 如果类型字符串中包含"INT",那么该字段的亲缘关系是IN

iOS SQLite加密之SQLCipher

至于SQLCipher,我就不多说了,百度一下,你就知道.公司的iOS APP要给SQLite,今天就上网查了些资料,做了下整理,主要参考SQLCipher的官方集成文档,有不妥之处大家提出来我再改进,感谢拍砖.官方集成文档:https://www.zetetic.net/sqlcipher/ios-tutorial/. Prerequisites 安装Xcode开发环境,不用多说了吧. OpenSSL 本教程用苹果提供的FrameWork:CommonCrypto,可在工程,Target,Bu

iOS sqlite数据库使用

关于sqlite是一个轻量的.跨平台的.开源的数据库引擎.他在读写效率,操作便捷程度,内存消耗上具有很大的优越性,所以很受移动开发者的喜爱.当然,sqlite 也因其力求简单高效,也就限制了它对并发,海量数据的处理.这篇博客主要讲的是iOS开发中sqlite和开源库FMDB的使用. demo 地址 TP 常使用的方法介绍 首先打开数据库 int result = sqlite3_open_v2(fileName.UTF8String, &db, SQLITE_IOERR_READ|SQLITE_

ios Sqlite数据库增删改查基本操作

研究了几天的数据库,终于把它给搞出来了.Sqlite是ios上最常用的数据库之一,大家还是有必要了解一下的.这是仿照网上的一个例子做的,有些部分写的不好,我稍作了修改,以讲解为主,主要让大家能够明白如何修改,明白原理,达到举一反三的目的. 先来看看效果图 先来看看数据库方法类,将各个操作都封装在一个类里面,达到代码重用的目的,这是程序员都应该努力去实现的目标,这样在下一次用到同样的方法和类的时候,就可以直接使用封装好的类,可以节约大量的时间. 先来看看.h文件 #import <Foundati

转:ios Sqlite数据库增删改查基本操作

研究了几天的数据库,终于把它给搞出来了.Sqlite是ios上最常用的数据库之一,大家还是有必要了解一下的.这是仿照网上的一个例子做的,有些部分写的不好,我稍作了修改,以讲解为主,主要让大家能够明白如何修改,明白原理,达到举一反三的目的. 先来看看效果图 先来看看数据库方法类,将各个操作都封装在一个类里面,达到代码重用的目的,这是程序员都应该努力去实现的目标,这样在下一次用到同样的方法和类的时候,就可以直接使用封装好的类,可以节约大量的时间. 先来看看.h文件 #import <Foundati

iOS SQLite详解

这周比较忙,前几天都加班到11点左右,基本都是到家都是12点左右(稍稍的抱怨一下,免费加班,何为免费,就是任何补偿都没有,例如调休,加班薪,餐补等各项福利,是一点都没有呀)因为App要上线了!App上线,也可以抽出部分时间整理自己的东西啦,准备花一周时间讲述iOS数据存储方式.本篇主要是讲SQLite的使用和封装,读完大约10-15分钟. 一.SQLite概念 SQLite是轻量型关系型数据库(下面将拓展关系型数据库的概念):占用资源非常少:是无类型的数据库(意思是可以保存所有类型的数据)---

iOS sqlite 增删改查 简单封装(基于 FMDB)

/** *  对 sqlite 的使用进行简单封装,仅涉及简单的单表 增删改查 * *  基于 FMDB * *  操作基于 model ,数据库表字段与 model 属性一一对应,对 model 整体进行操作 * *  根据 model 对象自动建表,字段类型只支持 NSString , NSIteger , float * *  用到 runtime 运行时获取 model 属性 * */ 1 // 2 // AGDatabaseManager.h 3 // 4 // Created by

IOS Sqlite用户界面增删改查案例

1.案例简单介绍 对SQLite操作进行了简单的封装,将对数据表操作转变成对对象的操作,并通过UI界面完毕对用户表的增.删.改.查,执行界面例如以下图所看到的 a 2.项目project文件夹 UserModel类为用户对象模型.与数据库表中字段一一相应 BaseDB类为对sqlite简单封装,抽象出对数据库操作的三个方法.详细内容看http://blog.csdn.net/whzhaochao/article/details/38865535博文 UserDB继承于BaseDB.主要是完毕Us