iOS-SQLite的使用
2020-12-09 本文已影响0人
清风_____
一、首先要添加库文件libsqlite3.tbd
二、导入头文件,#import <sqlite3.h>
//生成路径
+(NSString *)path{
NSArray *documentArr = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
NSString *documentPath = [documentArr firstObject];
// crylown.db 为数据库的名字
NSString *path = [NSString stringWithFormat:@"%@/student.sqlite",documentPath];
NSLog(@"位置path == %@",path);
return path;
}
//创建/打开数据库
-(void)createDataBase{
int databaseResult = sqlite3_open([[SqliteObject path] UTF8String], &database);
if (databaseResult == SQLITE_OK) {
[self createForm];
}else{
NSLog(@"创建/打开数据库失败,%d",databaseResult);
}
}
//创建表
-(void)createForm{
char *error = NULL;
// 建表格式: create table if not exists 表名 (列名 类型,....) 注: 如需生成默认增加的id: id integer primary key autoincrement
const char *createSQL = "create table if not exists t_students (id integer primary key autoincrement, name text, age integer, sex text)";
// 执行sql语句
/**
第1个参数:数据库对象
第2个参数:sql语句
第3个参数:查询时候用到的一个结果集闭包
第4个参数:用不到
第5个参数:错误信息
*/
int tableResult = sqlite3_exec(database, createSQL, NULL, NULL, &error);
if (tableResult == SQLITE_OK) {
NSLog(@"创建成功");
}else{
NSLog(@"创建表失败:%s",error);
}
}
// 插入数据
- (void)insertData:(NSString*)name ageinteger:(int)age sexStr:(NSString*)sex
{
// 拼接 sql 语句
NSString *sql = [NSString stringWithFormat:@"insert into t_students (name,age,sex) values ('%@',%d,'%@');",name,age,sex];
// 执行 sql 语句
char *errMsg = NULL;
int result = sqlite3_exec(database, sql.UTF8String, NULL, NULL, &errMsg);
if (result == SQLITE_OK) {
NSLog(@"插入数据成功 - %@",name);
} else {
NSLog(@"插入数据失败 - %s",errMsg);
}
}
// 查询操作
- (void)sqlData {
// sql语句
const char *sql="SELECT id,name,age,sex FROM t_students WHERE age<20;";
sqlite3_stmt *stmt = NULL;
/**
第1个参数:一个已经打开的数据库对象
第2个参数:sql语句
第3个参数:参数2中取出多少字节的长度,-1 自动计算,\0停止取出
第4个参数:准备语句
第5个参数:通过参数3,取出参数2的长度字节之后,剩下的字符串
*/
// 进行查询前的准备工作
if (sqlite3_prepare_v2(database, sql, -1, &stmt, NULL) == SQLITE_OK) { // sql语句没有问题
NSLog(@"sql语句没有问题");
// 每调用一次sqlite3_step函数,stmt就会指向下一条记录
while (sqlite3_step(stmt) == SQLITE_ROW) { // 找到一条记录
// 取出数据
int ID = sqlite3_column_int(stmt, 0); // 取出第0列字段的值
const unsigned char *name = sqlite3_column_text(stmt, 1); // 取出第1列字段的值
int age = sqlite3_column_int(stmt, 2); // 取出第2列字段的值
const unsigned char *sex = sqlite3_column_text(stmt, 3);
printf("%d %s %d\n %s",ID,name,age,sex);
}
} else {
NSLog(@"查询语句有问题");
}
}
//修改数据
-(void)updateData{
//其实Sqlite的数据插入,修改,删除执行的方法都是一样的只是执行的sql语句不一样,想知道sql的更多语句操作自行百度了,比较多这里就不讲解了,只介绍一些基本的操作方法。
//sqlite3数据(把年龄大于60的学生名字全部改成‘哈哈’)
NSString *sql = @"update t_students set name = '哈哈' where age > 60";
char *errorMesg = NULL;
int result = sqlite3_exec(database, sql.UTF8String, NULL, NULL, &errorMesg);
if (result == SQLITE_OK) {
NSLog(@"更改成功");
}else {
NSLog(@"更改失败");
}
//然后执行查询语句就能看到更改后的效果了
}
//删除数据
-(void)deleteData{
//删除表中年龄大于60的学生数据
NSString *sql = @"delete from t_students where age >= 60";
char *errorMesg = NULL;
int result = sqlite3_exec(database, sql.UTF8String, NULL, NULL, &errorMesg);
if (result == SQLITE_OK) {
NSLog(@"删除成功");
}else {
NSLog(@"删除失败");
}
}
三、SQL基础
1、SQL语句常用操作
增、删、改、查,CRUD,Create[新建], Retrieve[检索], Update[更新], Delete[删除]。
2、SQL语法写法特点
a、不区分大小写(CREATE = create)
b、每条语句以分号(;)结尾
c、关键字建议大写
3、SQL语句常用关键字
select、insert、update、delete、from、create、where、desc、order、by、group、table、alter、view、index等
数据定义语句(DDL):包括create和drop等操作,在数据库中创建新表或删除表(create table或 drop table)
数据操作语句(DML):包括insert、update、delete等操作,分别用于添加、修改、删除表中的数据
数据查询语句(DQL):可以用于查询获得表中的数据,关键字select是DQL(也是所有SQL)用得最多的操作,其他DQL常用的关键字有where,order by,group by和having
https://blog.csdn.net/mrliangc/article/details/52491027
https://www.jianshu.com/p/a30e22cdf739
https://www.jianshu.com/p/36ffc387389b