一、终端操作
1.先进入项目的目录里
//找到Documents路径
NSLog(@"%@", NSHomeDirectory());
终端:
cd Documents/
2.创建数据库
sqlite3 数据库名称(后缀可以随便加)
sqlite3 db_student.sql
4.创建表(SQL语句)
create table if not exists t_student(id integer primary key autoincrement,name text,age integer);
5.删除表
drop table t_student;
6.增删改查(SQL语句)
insert into t_student(name,age) values(‘JianZe‘,11);
delete from student where id=2;
update student set name=‘jianze‘ where name=‘JianZe‘;
select * from t_student
注意:
.help 获取帮助
.quit 退出数据库
.schema 查看数据库
二、代码实现
1.创建数据库
打开数据库,如果数据库不存在就创建
NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask, YES).firstObject stringByAppendingPathComponent:@"db_student.sql"];
int result = sqlite3_open([path UTF8String], &_sql);
if (result == SQLITE_OK) {
NSLog(@"打开数据库成功");
} else {
NSLog(@"打开数据库失败");
}
2.创建表
//1.创建sql语句
NSString *createSql = @"create table t_student(id integer primary key autoincrement, name text, age integer)";
//2.执行语句 除了select之外都是通过这个执行
int result = sqlite3_exec(_sql, [createSql UTF8String], NULL, NULL, NULL);
if (result == SQLITE_OK) {
NSLog(@"创建表成功");
} else {
NSLog(@"创建表失败");
}
3.增加数据
已知数据源
NSString *insertSql = @"insert into t_student(name,age) values(‘JianZe‘,20)";
if (sqlite3_exec(_sql, [insertSql UTF8String], NULL, NULL, NULL) == SQLITE_OK) {
NSLog(@"插入数据成功");
} else {
NSLog(@"插入数据失败");
}
需要外部传递数据
//占位符 ?
NSString *insertSql = @"insert into t_student(name,age,icon) values(?,?,?)";
//预处理
sqlite3_stmt *stmt = NULL;
if (sqlite3_prepare(_sql, [insertSql UTF8String], -1, &stmt, NULL) == SQLITE_OK) {
UIImage *img = [UIImage imageNamed:@"1"];
NSData *imgData = UIImagePNGRepresentation(img);
//绑定数据 bind 有几个问号就要绑定几个
sqlite3_bind_text(stmt, 1, "Yill", -1, NULL);
sqlite3_bind_int(stmt, 2, 20);
sqlite3_bind_blob(stmt, 3, [imgData bytes], (int)imgData.length, NULL);
//将绑定的数据保存到数据库
if (sqlite3_step(stmt) == SQLITE_DONE) {
NSLog(@"保存数据成功");
} else {
NSLog(@"保存数据失败");
}
//释放内存空间
sqlite3_finalize(stmt);
} else {
NSLog(@"预处理失败");
}
4.改动数据
NSString *updateSql = @"update t_student set age=21 where id=1";
if (sqlite3_exec(_sql, [updateSql UTF8String], NULL, NULL, NULL) == SQLITE_OK) {
NSLog(@"更新数据成功");
} else {
NSLog(@"更新数据失败");
}
5.查询数据
//关键字 limit 0,2 从哪个位置读 每次读几个
NSString *selectSql = @"select * from t_student limit 0,2";
//1.预处理 -1表示语句长度自己计算
sqlite3_stmt *stmt = NULL;
if (sqlite3_prepare(_sql, [selectSql UTF8String], -1, &stmt, NULL) == SQLITE_OK) {
//2.一条一条读取数据 如果有 返回值就是SQLITE_ROW
while (sqlite3_step(stmt) == SQLITE_ROW) {
//一列一列地去读取每一条记录 1表示列
char *name = (char *)sqlite3_column_text(stmt, 1);
int age = sqlite3_column_int(stmt, 2);
NSData *data = [NSData dataWithBytes:sqlite3_column_blob(stmt, 3) length:sqlite3_column_bytes(stmt, 3)];
NSLog(@"%s, %d, %@", name, age, [UIImage imageWithData:data]);
}
} else {
NSLog(@"预处理失败");
}
6.在已有的表中添加字段
NSString *alterSql = @"alter table t_student add icon blob";
if (sqlite3_exec(_sql, [alterSql UTF8String], NULL, NULL, NULL) == SQLITE_OK) {
NSLog(@"添加字段成功");
} else {
NSLog(@"添加字段失败");
}
帮助文档:http://www.w3school.com.cn/sql/sql_wildcards.asp
原文:https://www.cnblogs.com/jianze/p/10827445.html