iOS SQLite使用

数据库的特征:

  • 以一定方式存储在一起
  • 能为多个用户分享
  • 具有尽可能少的冗余代码
  • 与程序彼此独立的数据集

SQLite

  • SQLite是一个轻量级关系数据库,最初的设计目标是用于嵌入式系统,它占用资源非常少.在iOS中,只需要加入li’blibsqlite3.0依赖以及引入sqlite3.h头文件即可.
  • SQLite是无类型的数据库,可以保存任何类型的数据,对于SQLite来说对字段不指定类型是完全有效的

SQLite近似类似规则

  • 如果类型字符串中包含”INT”,那么该字段的亲缘关系是INTEGER
  • 如果类型字符串中包含”CHAR”, “CLOB”或”TEXT”,那么该字段的亲缘类型是TEXT,如VARCHAR
  • 如果类型字符串中包含”BLOB”,那么该字段的亲缘类型是NONE
  • 如果类型字符串中包含”REAL”, “FLOA”或”DOUB”, 那么该字段的亲缘类型是REAL
  • 其余情况下,字段的亲缘类型为NUMERIC

SQLite字段的约束条件

  • not null —–非空
  • unique ——唯一
  • primary key ——主键
  • foreign key ———外键
  • check ———条件检查,确保一列中所有的值满足一定条件
  • default ——默认
  • autoincrement — 自增型变量,该字段数据如果为整型可以自动加1

SQLite字段约束条件: PRIMARY KEY — 主键

  • 首先,数据表中每一条记录都有一个主键,这就像我们的身份证号码等,反过来说每一个主键对应着一条数据记录,所以,主键必须是唯一的
  • 其次,一般情况主键同时也是一个索引,所以通过主键查找记录速度比较快
  • 第三,在关系类型库中,一个表的主键可以作为另外一个表的外键,这样,这两个表之间就通过这个键建立了关系
  • 最后,主键一般是整数或者字符串,只要保证唯一就行,在SQLite中,主键如果是整型类型,该列的值可以自动增长

SQLite语句

  • 建表命令(create table)

  • 数据插入命令(insert)

  • 数据库更新命令(updata)

  • 数据库删除命令(delete)

  • 数据库检索命令(select)

iOS的数据库技术的实现:

代码:

#pragma mark - 1.引入<sqlite3.h>头文件
//添加libsqlite3.0.tbd

#import <sqlite3.h>

static sqlite3 *db;//是指向数据库的指针,我们其他操作都是用这个指针来完成

#pragma mark - 2.打开数据库

- (void)openSqlite {
    //判断数据库是否为空,如果不为空说明已经打开
    if(db != nil) {
        NSLog(@"数据库已经打开");
        return;
    }

    //获取文件路径
    NSString *str = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) firstObject];
    NSString *strPath = [str stringByAppendingPathComponent:@"my.sqlite"];
    NSLog(@"%@",strPath);
    //打开数据库
    //如果数据库存在就打开,如果不存在就创建一个再打开
    int result = sqlite3_open([strPath UTF8String], &db);
    //判断
    if (result == SQLITE_OK) {
        NSLog(@"数据库打开成功");
    } else {
        NSLog(@"数据库打开失败");
    }
}

#pragma mark - 3.增删改查
//创建表格
- (void)createTable {
    //1.准备sqlite语句
    NSString *sqlite = [NSString stringWithFormat:@"create table if not exists ‘student‘ (‘number‘ integer primary key autoincrement not null,‘name‘ text,‘sex‘ text,‘age‘integer)"];
    //2.执行sqlite语句
    char *error = NULL;//执行sqlite语句失败的时候,会把失败的原因存储到里面
    int result = sqlite3_exec(db, [sqlite UTF8String], nil, nil, &error);
    //3.sqlite语句是否执行成功

    if (result == SQLITE_OK) {
        NSLog(@"创建表成功");
    } else {
        NSLog(@"创建表失败");
    }
}

//添加数据
- (void)addStudent:(student *)stu {
    //1.准备sqlite语句
    NSString *sqlite = [NSString stringWithFormat:@"insert into student(number,name,age,sex) values (‘%ld‘,‘%@‘,‘%@‘,‘%ld‘)",stu.number,stu.name,stu.sex,stu.age];
    //2.执行sqlite语句
    char *error = NULL;//执行sqlite语句失败的时候,会把失败的原因存储到里面
    int result = sqlite3_exec(db, [sqlite UTF8String], nil, nil, &error);
    if (result == SQLITE_OK) {
        NSLog(@"添加数据成功");
    } else {
        NSLog(@"添加数据失败");
    }
}

//删除数据
- (void)delete:(student*)stu {
    //1.准备sqlite语句
    NSString *sqlite = [NSString stringWithFormat:@"delete from student where number = ‘%ld‘",stu.number];
    //2.执行sqlite语句
    char *error = NULL;//执行sqlite语句失败的时候,会把失败的原因存储到里面
    int result = sqlite3_exec(db, [sqlite UTF8String], nil, nil, &error);
    if (result == SQLITE_OK) {
        NSLog(@"删除数据成功");
    } else {
        NSLog(@"删除数据失败%s",error);
    }
}

//修改数据
- (void)updataWithStu:(student *)stu {
    //1.sqlite语句
    NSString *sqlite = [NSString stringWithFormat:@"update student set name = ‘%@‘,sex = ‘%@‘,age = ‘%ld‘ where number = ‘%ld‘",stu.name,stu.sex,stu.age,stu.number];
    //2.执行sqlite语句
    char *error = NULL;//执行sqlite语句失败的时候,会把失败的原因存储到里面
    int result = sqlite3_exec(db, [sqlite UTF8String], nil, nil, &error);
    if (result == SQLITE_OK) {
        NSLog(@"修改数据成功");
    } else {
        NSLog(@"修改数据失败");
    }
}

//查询所有数据
- (NSMutableArray*)selectWithStu {
    NSMutableArray *array = [[NSMutableArray alloc] init];
    //1.准备sqlite语句
    NSString *sqlite = [NSString stringWithFormat:@"select * from student"];
    //2.伴随指针
    sqlite3_stmt *stmt = NULL;
    //3.预执行sqlite语句
    int result = sqlite3_prepare(db, sqlite.UTF8String, -1, &stmt, NULL);//第4个参数是一次性返回所有的参数,就用-1
    if (result == SQLITE_OK) {
        NSLog(@"查询成功");
        //4.执行n次
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            student *stu = [[student alloc] init];
            //从伴随指针获取数据,第0列
            stu.number = sqlite3_column_int(stmt, 0);
            //从伴随指针获取数据,第1列
            stu.name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)] ;
            //从伴随指针获取数据,第2列
            stu.sex = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)] ;
            //从伴随指针获取数据,第3列
            stu.age = sqlite3_column_int(stmt, 3);
            [array addObject:stu];
        }
    } else {
        NSLog(@"查询失败");
    }
//5.关闭伴随指针
    sqlite3_finalize(stmt);
    return array;
}

#pragma mark - 4.关闭数据库
- (void)closeSqlite {

    int result = sqlite3_close(db);
    if (result == SQLITE_OK) {
        NSLog(@"数据库关闭成功");
    } else {
        NSLog(@"数据库关闭失败");
    }
}
时间: 2024-12-29 06:48:45

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加密之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