博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
SQL (FMDB)
阅读量:5154 次
发布时间:2019-06-13

本文共 4544 字,大约阅读时间需要 15 分钟。

sql常用语句

创建表

CREATE TABLE IF NOT EXISTS "T_Person" (      "id" INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,      "name" TEXT,      "age" INTEGER,      "heigth" REAL)//下边是sqllite编译器里边的语句/*简单约束*/CREATE TABLE IF NOT EXISTS t_student(      id INTEGER PRIMARY KEY AUTOINCREMENT,      name TEXT,      age INTEGER);CREATE TABLE IF NOT EXISTS t_student(     id INTEGER PRIMARY KEY AUTOINCREMENT,     name TEXT UNIQUE,     age INTEGER);/*添加主键*/CREATE TABLE IF NOT EXISTS t_student(     id INTEGER PRIMARY KEY AUTOINCREMENT,     name TEXT,     age INTEGER,     score REAL);/*添加主键*/CREATE TABLE IF NOT EXISTS t_student(     id INTEGER,     name TEXT,     age INTEGER,     score REAL,     PRIMARY KEY(id));

 

查询

/*分页*/ SELECT * FROM t_student ORDER BY id ASC LIMIT 30, 10;  /*排序*/ SELECT * FROM t_student WHERE score > 50 ORDER BY age DESC; SELECT * FROM t_student WHERE score < 50 ORDER BY age ASC , score DESC; /*计量*/ SELECT COUNT(*) FROM t_student WHERE age > 50; /*别名*/ SELECT name as myName, age as myAge, score as myScore FROM t_student; SELECT name myName, age myAge, score myScore FROM t_student; SELECT s.name myName, s.age myAge, s.score myScore FROM t_student s WHERE s.age > 50; /*查询*/ SELECT name, age, score FROM t_student; SELECT * FROM t_student;

 

修改 

UPDATE t_student SET name = 'MM' WHERE age = 10; UPDATE t_student SET name = 'WW' WHERE age is 7; UPDATE t_student SET name = 'XXOO' WHERE age < 20; UPDATE t_student SET name = 'NNMM' WHERE age < 50 and score > 10; /*更新记录的name*/ UPDATE t_student SET name = 'zhangsan';

 

删除

DELETE FROM t_student; DELETE FROM t_student WHERE age < 50;

 

插入

INSERT INTO t_student (age, score, name) VALUES ('28', 100, 'zhangsan'); INSERT INTO t_student (name, age) VALUES ('lisi', '28'); INSERT INTO t_student (score) VALUES (100);

 

删除表

/*删除表*/ DROP TABLE IF EXISTS t_student;

 

FMDB

  • 什么是FMDB

    FMDB是iOS平台的SQLite数据库框架
    FMDB以OC的方式封装了SQLite的C语言API

  • FMDB的优点

    使用起来更加面向对象,省去了很多麻烦、冗余的C语言代码
    对比苹果自带的Core Data框架,更加轻量级和灵活
    提供了多线程安全的数据库操作方法,有效地防止数据混乱

  • FMDB 的github地址

  • FMDB有三个主要的类

    FMDatabase

    一个FMDatabase对象就代表一个单独的SQLite数据库

    用来执行SQL语句

  • FMResultSet

    使用FMDatabase执行查询后的结果集

  • FMDatabaseQueue

    用于在多线程中执行多个查询或更新,它是线程安全的

 
通过指定SQLite数据库文件路径来创建FMDatabase对象       FMDatabase *db = [FMDatabase databaseWithPath:path];        if (![db open]) {           NSLog(@"数据库打开失败!");        }       文件路径有三种情况       具体文件路径       如果不存在会自动创建       空字符串@""       会在临时目录创建一个空的数据库       当FMDatabase连接关闭时,数据库文件也被删除              在FMDB中,除查询以外的所有操作,都称为“更新”                     create、drop、insert、update、delete等       使用executeUpdate:方法执行更新       - (BOOL)executeUpdate:(NSString*)sql, ...       - (BOOL)executeUpdateWithFormat:(NSString*)format, ...       - (BOOL)executeUpdate:(NSString*)sql withArgumentsInArray:(NSArray *)arguments      示例      [db executeUpdate:@"UPDATE t_student SET age = ? WHERE name = ?;", @20, @"Jack"]

 

查询的方法 

查询方法      - (FMResultSet *)executeQuery:(NSString*)sql, ...      - (FMResultSet *)executeQueryWithFormat:(NSString*)format, ...      - (FMResultSet *)executeQuery:(NSString *)sql withArgumentsInArray:(NSArray *)arguments      示例      // 查询数据      FMResultSet *rs = [db executeQuery:@"SELECT * FROM t_student"];     // 遍历结果集     while ([rs next]) {       NSString *name = [rs stringForColumn:@"name"];       int age = [rs intForColumn:@"age"];       double score = [rs doubleForColumn:@"score"];      }

 

FMDatabaseQueue
  • FMDatabase这个类是线程不安全的,如果在多个线程同时使用一个FMDatabase实例,会造成数据混乱问题

  • 为了保证线程安全,FMDB提供方便快捷的FMDatabaseQueue类

  • FMDatabaseQueue 的创建

    FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:path];

简单使用        [queue inDatabase:^(FMDatabase *db) {        [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];        [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Rose"];        [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jim"];        FMResultSet *rs = [db executeQuery:@"select * from t_student"];        while ([rs next]) {    // …         }        }];

 

使用事务

[queue inTransaction:^(FMDatabase *db, BOOL *rollback) {        [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jack"];        [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Rose"];        [db executeUpdate:@"INSERT INTO t_student(name) VALUES (?)", @"Jim"];        FMResultSet *rs = [db executeQuery:@"select * from t_student"];        while ([rs next]) {           // …           }        }];         事务回滚        *rollback = YES;
 
总结:本博客主要学习了sql增删改查语句,学习了FMDB的框架的三个类:
FMDatabase对象就代表一个单独的SQLite数据库,FMDatabase执行查询后的结果集,FMDatabaseQueued串行队列,同步任务;

 

转载于:https://www.cnblogs.com/GJ-ios/p/8176200.html

你可能感兴趣的文章
|Vijos|图论最短路|P1082 丛林冒险
查看>>
iOS开发——获取本设备IP
查看>>
20145239杜文超 《Java程序设计》第7周学习总结
查看>>
冒泡排序(C实现)
查看>>
Swift -> RunTime(动态性) 问题 浅析
查看>>
<虚树+树型DP> SDOI2011消耗战
查看>>
算法啊算法
查看>>
安装完Anaconda python 3.7,想使用python3.6方法
查看>>
有意公司可联系我,我会提交我的简历!
查看>>
组播协议——IGMP v2报文头介绍
查看>>
微信小程序之----问题
查看>>
thinkphp整合Ueditor编辑器
查看>>
小程序
查看>>
oracle汇编03
查看>>
UITextInputMode
查看>>
hdu 3790 最短路径问题
查看>>
hdu 3105 Fred's Lotto Tickets (水)
查看>>
C# 获取进程或线程的相关信息
查看>>
xcode调试打印QString
查看>>
Windows 7 常用快捷键 命令
查看>>