FMDB复习

//  colum/列/字段
//  row/行/记录
//  主键的作用是唯一标识一条记录
//  sql语句注意:不区分大小写,以分号结束

//  如果增加字段,可能要指定数据类型,SQL中的五种数据类型:字符型,文本型,数值型,逻辑型和日期型。

http://www.cnblogs.com/shenliang123/archive/2012/04/07/2435908.html

先声明两个必须变量:

{
    NSString *path; //数据库的存储路径
}
@property (nonatomic,strong)FMDatabase *dataBase;

1. 创建数据库

//1.创建一个数据库文件存放的位置路径
    path=[NSHomeDirectory() stringByAppendingString:@"/Documents/users.db"];
//2.创建FMDatabase对象 并用数据库文件路径初始化
    _dataBase=[FMDatabase databaseWithPath:path];
//3.打开数据库
    if([_dataBase open]){
        NSLog(@"数据库成功打开");
    }else {
        NSLog(@"数据库打开失败");
    }
 //4.关闭数据库
   [_dataBase close];

//  为什么要关闭数据库?
//  注意:每一次对数据库操作(增删改查)的时候,重新打开数据库,然后关闭,以免数据库,一直保持打开状态,造成不必要的资源消耗

2. 创建表

    NSString *sql=@"CREATE TABLE if not exists users (id integer primary key autoincrement,name VARCHAR(20),age VARCHAR(10));";
    // sql语句为什么一般都用大写?
    // 在iOS开发里面,为了区别sql的关键字,与表名或者列名,以及变量名区分,sql 语句通常都是用大写来标示
    // 如果id设置为自动增长的话,那么把表中的数据删除后,重新插入新的数据,id的编号不是从0开始,而是接着之前的id进行编号。PRIMARY KEY AUTOINCREMENT, 也就是这句话。

    //1.打开数据库
    if ([_dataBase open]) {
        //2.执行sql语句
        [_dataBase executeUpdate:sql];
    }else{
        NSLog(@"数据库打开失败");
    }
    //3.关闭数据库
    [_dataBase close];

3. 插入数据

    NSString *her=@"张三";
    NSString *sql=@"INSERT INTO users (name = ?,age = ?);";

    // NSString *[email protected]"INSERT INTO users (name,age) VALUES (?,?);";
    // executeUpdateWithFormat : 不确定的参数用%@、%d等来占位
    //1.
    if([_dataBase open]){
        //2. 插入单条数据
        [_dataBase executeUpdate:sql];
        [_dataBase executeUpdateWithFormat:@"INSERT INTO users (name,age) VALUES (%@,%d);",her,24];

        //多次插入
       for(int i=0;i<1000;i++){
           [_dataBase executeUpdateWithFormat:@"INSERT INTO users (name,age) VALUES (%@,%d);",@"刘亦菲",24+i];
        }
    }else{
        NSLog(@"打开数据库失败");
    }

    //3.
    [_dataBase close];

4. 删除数据

    NSString *sql=@"DELETE FROM users WHERE name = ‘范冰冰‘;";
    //1.
    if([_dataBase open]){
        //2.
        [_dataBase executeUpdate:sql];
    }else {
        NSLog(@"数据库打开失败");
    }
    //3.
    [_dataBase close];

5. 修改数据

    NSString *sql=@"UPDATE users SET name = ? WHERE id > 1;";
    //1.
    if ([_dataBase open]) {
        //2.
        [_dataBase executeUpdate:sql,@"杨颖"];

    }else{

        NSLog(@"数据库打开失败");

    }
    //3.
    [_dataBase close];

如果是升级,可能要增加字段,注意删除字段是不支持的。增加字段可以这样:

NSString *sql=@"ALTER TABLE users ADD COLUMN sex bit"; //增加sex字段

6. 查询数据

NSString *sql=@"SELECT * FROM users";
//NSString *[email protected]"SELECT * FROM users WHERE id > ?;";
//1.
    if ([_dataBase open]) {

        //2.
        // 查询语句查询到的是一个集合,
        FMResultSet *set=[_dataBase executeQuery:sql];

        // 遍历查询到的结果集合
        while ([set next]) {

            //NSInteger ID=[set intForColumn:@"id"];
            NSString *name=[set stringForColumn:@"name"];
            NSString *age=[set stringForColumn:@"age"];
            NSLog(@"name:%@ age:%@",name,age);

        }
    }else{

        NSLog(@"数据库打开失败");
    }
    //3.
    [_dataBase close];

分页查询:

NSString *sql=@"SELECT * FROM users ORDER BY age DESC LIMIT 0,5;";
//ORDER BY age DESC 先降序
//LIMIT 0,5  跳过0条记录,取5条记录
时间: 2024-10-24 20:33:55

FMDB复习的相关文章

[原创]使用FMDB的访问数据库

最近开始写博客了,把我学习到的东西进行汇总和总结. 今天复习到FMDB,FMDB是一个第三方的访问数据库的插件.有了它以后,妈妈再也不用担心我访问数据库的问题. 好了,言归正传,为什么要使用FMDB呢? 最直接的一个原因就是,iOS中的sqlite3访问数据库的代码太过繁琐,难记,写起来也不顺手,究其原因非常简单,就是sqlite3是C封装的一个访问数据库的api,它是用C写的,你想用也要用C的形式去访问,所以,使用起来你会觉得有点变扭,就好像是一个生活在广东的外地人,虽然也可以和广东人交流,但

C++基础复习

一. C++与C的比较: C语言是一个结构化语言,它的重点在于算法和数据结构,C语言的设计首先要考虑的是如何通过一个过程,对输入(或环境条件)进行运算处理得到的输出(或实现过程(事物)控制). C++,首要考虑的是如何构造一个对象模型,让这个模型能够契合与之对应的问题域,这样就可以通过获取对象的状态信息得到输出或实现过程(事物)控制. 所以C语言和C++的最大区别在于它们解决问题的思想不同,一个面向过程一个面向对象. C++对C的"增强",表现在六个方面: 1.类型检测更为严格. 2.

大量逻辑判断优化的思路——责任链模式复习总结及其和状态模式对比

俗话说,自己写的代码,6个月后也是别人的代码……复习!复习!复习!涉及的总结知识点如下: 责任链模式概念和例子 使用的条件 和状态模式的比较分析 责任链的优缺点 纯的责任链和不纯的责任链 javax.servlet.Filter#doFilter()方法源码分析 基于AOP思想,模拟一个拦截器 前面说了一个状态模式,总结过程中发现和这个责任链的使用场景很类似,都是为了解耦大量复杂业务逻辑判断的,那么他们有什么不同呢?回忆状态模式——状态模式允许通过改变对象的内部状态而改变对象自身的行为,这个对象

算法分析与设计复习

算法分析与设计复习 2016年初,研一上学期期末考试前,复习并总结算法分析与设计科目的内容.复习过程参照<算法导论>中文第2版,同时参照PPT,章节划分根据PPT内容 概要: 第一章 概述 第二章 插入排序&分治策略 第三章 复杂度分析 第四章 堆与堆排序 第五章 快速排序 第六章 线性时间排序 第一章 概述 算法的应用范围 算法在诸如生物等诸多领域有其应用 算法的意义 算法在很多情况下让不可能完成的事情变成了可能,让处理的很慢的过程变快. 一个铺垫 一串不全为0的数,怎么取能拿到一段

iOS中 FMDB第三方SQLite数据库 UI_20

1.什么是FMDB? FMDB是iOS平台下SQLite数据库,只不过它是OC方式封装了C语言的SQLite语句,使用起来更加面向对象 2.FMDB的优点:1.使用起来更加面向对象; 2.对比苹果自带的 Core Data 数据管理工具更加的轻量级,更加的灵活,而且FMDB支持跨平台; 3.提供多线程下的数据安全保护机制,有效地防止数据混乱 3.FMDM中重要的类: FMDBDataBase: 它代表一个数据库对象,(我们需要创建数据库对象时就使用这个类) FMDBDataBaseQueue:

ios开发FMDB导入SQLCipher加密数据库

转:http://www.2cto.com/kf/201407/315727.html [iOS]FMDB/SQLCipher数据库加解密,迁移

复习PHP-语言参考-预定义接口

1.Traversable 他是一个遍历接口规范 注意:发现一个有用的函数get_declared_classes,可以以数组形式显示当前脚本下所有已经定义的类名 2.Iterator Iterator迭代器继承自Traversable,是一种遍历对象内容的对象. 你可以自己写一个子类继承自它,并写上具体遍历的方法. Iterator包含:current(返回当前元素),key(当前键),next(下一个元素),rewind(返回至初始元素),valid(检测当前元素是否存在)五种方法. 3.I

underscore 复习 对象函数 篇章

_.partial = function(func) { var boundArgs = slice.call(arguments, 1); var bound = function() { var position = 0, length = boundArgs.length; var args = Array(length); for (var i = 0; i < length; i++) { args[i] = boundArgs[i] === _ ? arguments[positio

数据结构复习之C语言指针与结构体

数据结构指针复习: #include <stdio.h> void main() { int a[5] = {8, 2, 3, 4, 5}; // a[3] == *(3+a) printf("%d\n", *(3+a)); // a[3] 4 printf("*a其实就是a[0]: %d\n", *a); // 8 // 地址是连续的 printf("%p\n", a+1); printf("%p\n", a+2