您的位置:首页 > 数据库

随波逐流之IOS数据库的基本操作

2015-09-16 20:23 471 查看
// 初始化方法

// 创建单例类 进行对数据库 操作方法的封装

+ (SQLiteManager *)shareManager

{

static SQLiteManager *manager = nil;

if (manager == nil)

{

manager = [[SQLiteManager alloc] init];

}

return manager;

}

// 定义一个静态指针 负责 链接数据库

static sqlite3 *db = nil;

// 打开数据库

// sqlite3 * 表示咱们的数据库

- (sqlite3 *)openDB

{

// 判断 如果数据库不为空 就说明数据库存在 直接返回

if (db != nil)

{

return db;

}

// 不存在就创建一个数据库

// 获取路径

NSString *documentsPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory , NSUserDomainMask, YES) lastObject];

//拼接路径

// 数据库的名称 Student.sqlite

NSString *dbPath = [documentsPath stringByAppendingPathComponent:@"Student.sqlite"];

NSLog(@"%@", dbPath);

// 创建数据库

// 参数1,文件路径 需要把OC 的字符串 转化一下类型dbPath.UTF8String

// 参数2 数据库地址

// sqlite3_open 该函数如果有数据库存在就打开 没有就创建一个出来

int result = sqlite3_open(dbPath.UTF8String, &db);

// 查看命令返回结果

//SQLITE_OK 表示成功

if (result == SQLITE_OK) {

NSLog(@"创建成功");

} else

{

NSLog(@"创建失败");

}

return db;

}

// 关闭数据库

- (void)closeDB

{

// 关闭数据库

int result = sqlite3_close(db);

if (result == SQLITE_OK)

{

NSLog(@"关闭成功");

// 如果成功 把数据库重置

db = nil;

} else

{

NSLog(@"关闭失败");

}

}

// 创建一个表

- (void)createTable

{

// 1. 打开数据库

db = [self openDB];

// 2. 写创建表的sql语句

NSString *sql = @"create table IF NOT EXISTS student (number integer primary key not NULL, name text not NULL, gender text not NULL, age integer not NULL)";

// 3. 执行这个语句

char *error = nil;

int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, &error);

// 4. 判断是否成功

if (result == SQLITE_OK) {

NSLog(@"创建表成功");

} else

{

NSLog(@"创建失败表");

}

// 5. 关闭数据库

[self closeDB];

}

// 插入数据

// 传入的不是model 而是它的信息

- (void)insertModel:(Model *) model

{

// 打开数据库

db = [self openDB];

//创建sql语句

NSString *sql =[NSString stringWithFormat:@"insert into student (number, name, gender, age) values ( '%ld', '%@', '%@', %ld)", model.number, model.name, model.gender, model.age];

// 执行语句

int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, nil);

if (result == SQLITE_OK) {

NSLog(@"插入成");

} else

{

NSLog(@"失败了");

}

}

// 删除

- (void)deleteModelWithAge:(NSInteger)age

{

// 1. 打开数据库

db = [self openDB];

// 2. 写sql语句

NSString *sql = [NSString stringWithFormat:@"delete from student where age > '%ld' ", age];

// 3.执行语句

int ruslt = sqlite3_exec(db, sql.UTF8String, NULL, NULL, nil);

// 4.判断是否成功

if (ruslt == SQLITE_OK) {

NSLog(@"删除成功");

} else

{

NSLog(@"删除失败");

}

// 关闭

[self closeDB];

}

// 更新

- (void)updateName:(NSString *)name setAge:(NSInteger)age

{

db = [self openDB];

NSString *sql = [NSString stringWithFormat:@"update student set age = '%ld' where name = '%@' ", age, name];

int result = sqlite3_exec(db, sql.UTF8String, NULL, NULL, nil);

if (result == SQLITE_OK) {

NSLog(@"更新成功");

} else

{

NSLog(@"更新失败");

}

}

// 查询 根据姓名和年龄查询 学生

- (Model *)queryStudentWithName:(NSString *)name andAge:(NSInteger)age

{

// 1. 打开数据库

db = [self openDB];

// 2. 写SQL语句

NSString *sql = [NSString stringWithFormat:@"select *from student where name = '%@' and age = '%ld' ", name, age];

// 3. 创建跟随指针 保存SQL语句

sqlite3_stmt *stmt = nil;

// 执行语句

// 第三个参数 <#int nByte#> 表示SQL语句的长度

// 第四个参数 截取未执行的语句 一般都NULL

// 执行语句

int result = sqlite3_prepare(db, sql.UTF8String, -1, &stmt, NULL);

// 5,判定是否成

if (result == SQLITE_OK )

{

NSLog(@"查询语句成功");

// 6. 绑定查询信息

// 查询的条件是啥类型的 就选什么类型的 sqlite3_bind

// 参数2 指查询的第几个问号 从1开始(name)

// 参数3 填 查询条件的 字段名

// 参数4 长度-1

// 参数5 绑定后执行的函数 一般都是null

sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);

// 绑定条件2

// 参数2 指查询的第几个问号 从2开始(age)

sqlite3_bind_int(stmt, 2, -1);

// 7. 开始查询

// sqlite3_step(stmt) == SQLITE_ROW

// 如果 这条语句可以被找到 就返回SQLITE_ROW

while (sqlite3_step(stmt) == SQLITE_ROW)

{

// 8. 获取数据

// c参数2 <#int iCol#> 在数据库表中 列表从0 开始(自己写的属性) 需要打开数据库看一下在第几列

char *name = (char *)sqlite3_column_text(stmt, 1);

char *gender = (char *)sqlite3_column_text(stmt, 2);

int age = sqlite3_column_int(stmt, 3);

int number = sqlite3_column_int(stmt, 0);

// 9. 给对象进行 赋值

Model *model = [[Model alloc] init];

// c语言的字符串 转回 OC 字符串

model.name = [NSString stringWithUTF8String:name];

model.gender = [NSString stringWithUTF8String:gender];

model.age = age;

model.number = number;

// 10. 释放跟随指针

sqlite3_finalize(stmt);

// 关闭数据库

[self closeDB];

// 11. 返回数据 并释放对象

return [model autorelease];

}

} else

{

NSLog(@"查询语句执行失败");

}

// 关闭数据库

[self closeDB];

return nil;

}

// 查询所有的学生信息

- (NSArray *)queryAllModel

{

// 1.打开数据库

db = [self openDB];

// 2.sql 语句

NSString *sql = @"select *from student";

//3.创建跟随指针

sqlite3_stmt *stmt = nil;

// 4.执行SQL语句

int result = sqlite3_prepare(db, sql.UTF8String , -1, &stmt, NULL);

// 5.判断是否成功

if (result == SQLITE_OK)

{

NSLog(@"all 查询成功");

// 6. 不用绑定查询 创建一个数组(mutable) 保存查询好的model

NSMutableArray *array = [NSMutableArray array];

// 7. 开始查询

while (sqlite3_step(stmt) == SQLITE_ROW)

{

// 8. 读取数据

char *name = (char *)sqlite3_column_text(stmt, 1);

char *gender = (char *) sqlite3_column_text(stmt, 2);

int age = sqlite3_column_int(stmt, 3);

int number = sqlite3_column_int(stmt, 0);

// 9. 给对象赋值

Model *model = [[Model alloc]init];

model.name = [NSString stringWithUTF8String:name];

model.gender = [NSString stringWithUTF8String:gender];

model.age = age;

model.number = number;

// 10. 把model 放到数据中

[array addObject:model];

[model release];

}

// 11. s释放跟随指针

sqlite3_finalize(stmt);

// 12.关闭数据库

[self closeDB];

// 13. 返回数组

return array;

} else

{

NSLog(@"all 查询失败");

}

// 14. 关闭数据库

[self closeDB];

return nil;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: