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

本文共 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

你可能感兴趣的文章
java选择文件时提供图像缩略图[转]
查看>>
当DIV内出现滚动条,fixed实效怎么办?
查看>>
方维分享系统二次开发, 给评论、主题、回复、活动 加审核的功能
查看>>
Matlab parfor-loop并行运算
查看>>
Oracle HRMS API's
查看>>
mysql_real_escape_string() vs addslashes() vs addcslashes()
查看>>
string与stringbuilder的区别
查看>>
2012-01-12 16:01 hibernate注解以及简单实例
查看>>
iOS8统一的系统提示控件——UIAlertController
查看>>
PAT甲级——1101 Quick Sort (快速排序)
查看>>
python创建进程的两种方式
查看>>
1.2 基础知识——关于猪皮(GP,Generic Practice)
查看>>
迭代器Iterator
查看>>
java易错题----静态方法的调用
查看>>
php建立MySQL数据表
查看>>
最简单的线程同步的例子
查看>>
结对编程总结 1175 1176
查看>>
内核链表使用--删除链表节点
查看>>
eclipse启动无响应,停留在Loading workbench状态
查看>>
How exactly does Google AdWords work?
查看>>