一、SQL数据库简单知识
常见数据类型:
- integer 整数
- real 浮点
- text 文本字符串
- blob 二进制数据(文件)
1.建表
create table if not exists t_student;
2.创建一张包含外键引用的表
create table if not exists ’t_student’(id integer primary key autoincrement, class_id integer, constraint “fk_student” foreign key (class_id) references “t_class”(id));
3.删表
drop table if exists t_student;
4.创建表时可以给特定的字段设置一些约束条件,常见的约束条件有
not null 规定字符值不能为null
unique 规定字段值唯一
default 指定字段默认值
5.select查询数据库
(1).limit限制
select * from t_student limit 3, 5; // 查询5条记录,从第3条记录开始;
select * from t_student limit 5; // 查询5条记录(没有起始条件);
(2).多表查询
select * from t_food where food_type_id = (select id from t_food_type where name=“cc”);
(3).表连接查询
select f.name ft.name from t_food as f, t_food_type as ft where f.food_type_id = ft.id and ft.name = “cc”;
二、sqlite3.h
依赖库:libsqlite3.dylib
1.创建数据库实例
// 数据库实例
sqlite3 *db;
// 数据库文件路径
NSString *filename;
const char *cfilename = filename.UTF8String; // 将OC字符串转换成为C语言字符串;
2.打开数据库(如果数据库文件不存在,sqlite3_open函数会自动创建数据库文件)
int result = sqlite3_open(cfilename, $db);
if(result == SQLITE_OK) // 打开成功
3.创建数据库表
char *errorMsg = NULL; // 错误信息
int result = sqlite3_exec(db, sql, NULL, NULL, &errorMsg);
if(result == SQLITE_OK) // 创建表成功
4.插入数据
sqlite3_exec(db, sql, NULL, NULL, &errorMsg);
if(errorMsg) // 创建失败
5.查询数据
sqlite3_stmt *stmt = NULL; // 用来存储数据
// 查询数据,第三个参数表示sql语句的长度,传-1代表系统会自动计算SQL语句的长度
int result = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if(result == SQLITE_OK) // 查询成功
// 读取数据,每调用一次此函数,stmt则会指向下一条记录
while(sqlite3_step(stmt) == SQLITE_ROW){ // 找到一条记录
// 取出数据
int ID = sqlite3_column_int(stmt, 0); // 取出第0列的字段的值;
// 取出第一列数据,该数据类型为text
const unsigned char *name = sqilte3_column_text(stmt, 1);
}
三、FMDB
1.获取数据库实例对象
FMDatabase *db = [FMDataBase databaseWithPath:filename];
[db open];
2.执行一段sql语句
BOOL result = [db executeUpdate:@“”];
// sql语句传参
[db executeUpdate:@“INSERT INTO t_student (name, age) VALUES (?, ?);”, name, @(12)];
[db executeUpdateWithFormat:@“INSERT INTO t_student (name, age) VALUES (%@, %d)”, name, 12];
3.查询
// 执行查询语句
FMResultSet *resultSet = [db executeQuery:@“SELECT * FROM t_student”];
while([resultSet next]){
int ID = [resultSet intForColumn:@“age”];
NSString *name = [result stringForColumn:@“name”];
NSDictionary *dict = [result objectForColumnName:@“data”]; // 获取对象
}
4.数据库事务
FMDatabaseQueue *queue = [FMDatabaseQueue databaseQueueWithPath:filename];
[queue inDatabase:^(FMDatabase *db){
BOOL result = [db executeUpdate:@“…”];
}];