系统原生
主键能保证当前数据的唯一性
-
创建表设置主键 : (DDL语句)
- CREATE TABLE IF NOT EXISTS T_Person(
id integer PRIMARY KEY AUTOINCREMENT这是为主键并自增长
,
name text,
age integer
);
- CREATE TABLE IF NOT EXISTS T_Person(
-
删除表 删除指定表明的表,判断是否存在(存在在删除)
- DROP TABLE IF EXISTS T_Person;
插入数据 (DML语句)
insert into T_Person
(name,age)
VALUES
('张三',18);更新数据 (这样更新的话会更新表里的全部条数的值)
update T_Person SET name = '期望';
- 删除表 (没有告诉他需要删除那一条记录,会删除所有数据)
- DELETE FROM T_Person
- 判断语句
- where 相当于OC中的if
- 更新指定的数据 (更新表里面年龄等于50的数据)
- UPDATE T_Person SET name = '任务' WHERE age = 50;
查询语句 (DQL语句) (* 代表查询所有数据) 默认查询所有数据 使用WHERE可以进行判断
select * from T_Person
起别名
name as screenName 给name起别名
如果查询多张表的时候表明可以使用
逗号
分割给表起别名可以使用点语法确定属性
统计
SELECT COUNT(字段名) FROM T_Person
排序
ORDER BY 默认是升序
ASC 升序
DESC 降序
SELECT * FROM T_Person ORDER BY age ASC
分页查询
SELECT * FROM T_Person limit 5*(n-1),5
简单的约束
NOT NULL 设置约束 不能等于空
UNIQUE 规定当前字段必须保持唯一
DEFAULT 指定一个默认的值
FMDB的使用
- FMDatabase 单条线程时候使用
- FMDatabaseQueue 多条线程抢夺同一资源时候使用
- FMResultSet 查询的时候使用
- 创建数据库
_db = [FMDatabase databaseWithPath:filePath];
- 创建表
-
[_db executeUpdate:@"create table if not exists t_person(id integer primary key,name text not null,age integer)"]
返回一个BOOL值 - 插入数据
-
[_db executeUpdateWithFormat:@"insert into t_person(name,age) values('%@',%@)", person.name, person.age]
可以拼接参数 -
[_db executeUpdate:]
不可以拼接参数 - 查找数据
-
FMResultSet *result = [_db executeQuery:@"select name,age from t_person"];
返回一个结果 -
[result next]
判断条件,知道没有数控返回NO -
[result stringForColumn:@"name"];
字符串使用 -
[result intForColumn:@"age"];
int类型使用 - 模糊查找
不能使用系统提供的拼接方法会出现问题,要自己调用字符串方法
注意如果要获取字符串类型的话一定不要忘记加*' '*
[_db executeQuery:[NSString stringWithFormat:@"select name,age from t_person where name like '%%%@%%'", str]];
- SQLite如果使用多线程同时保存数据的时候,会出现崩溃,或是只能存一条.
- 使用FMDB的FMDatebaseQueue类创建一个全局的单例来保证线程安全