iOS中 DataBase SQL数据库 UI_高级

来源:互联网 时间:1970-01-01

SQL(Structured query Lauguage) :结构化 查询 语言
1.创建表格的SQL语句 create table if not exists Teacher(tea_id integer primary key autoincrement,tea_name text,tea_gender text,tea_age integer,tea_salary integer) 增: 2.向表中的字段下插入数据 insert into Teacher(tea_id,tea_name,tea_gender,tea_age,tea_salary)values(110,'小韩哥','男',18,1000) 查: 3.查找表格中所有的内容( * 查询老师表格中所有的数据) select * from Teacher 4.查找表格中对应字段的所有信息( tea_name和tea_gender 下的所有数据) select tea_name,tea_gender from Teacher 5.根据条件为’小韩哥’查找其信息 select *from Teacher where tea_name = '小韩哥' 改: 6.根据唯一标示符(主键)修改老师性别的信息 改数据都要通过唯一标示符去改 update Teacher set tea_gender = '女' where tea_id = 111 删: 7.根据唯一标示符(主键)删除老师性别的信息 删除数据都要通过唯一标示符去改 delete from Teacher where tea_id = 110 8.删除表格中所有的数据 delete from Teacher 9.根据表名删除整个表格 drop table Teacher —————————————————————————————————————————————————— 下面通过实际例子对数据库进行增、删、改、查: 布局如下(不再进行代码布局):4个textField 5个Button
———————————————————————————————————————— 准备一个Student的model类:

[email protected] Student : [email protected](nonatomic,assign)NSInteger number;@property(nonatomic,copy)NSString *name;@property(nonatomic,copy)NSString *gender;@property(nonatomic,assign)NSInteger age;@[email protected] Student- (void)dealloc{ self.name = nil; self.gender = nil; [super dealloc];}- (NSString *)description{ return [NSString stringWithFormat:@%ld %@ %@ %ld, self.number,self.name,self.gender,self.age];}@end
通过单例写接口并实现方法:
[email protected] Student;@interface DataBaseHandle : NSObject//创建单例的方法+ (DataBaseHandle *)shareDataBaseHandle;//打开数据库的方法- (void)openDataBase;//关闭数据库的方法- (void)closeDataBase;//插入学生对象的接口- (void)insertStudent : (Student *)student;//返回表格中所有学生的接口- (NSMutableArray *)selectAllStudent;//根据唯一标识学号删除学生- (void)deleteOneStudentByNumber : (NSInteger )number;//根据唯一标识学号修改学生的姓名- (void)updateStudentGender : (NSString *)gender ByNumber : (NSInteger )number;//根据学号查找学生- (Student *)selectOneStudentByNumber : (NSInteger)number;@end

DataBaseHandle.m
#import DataBaseHandle.h#import #import [email protected] DataBaseHandlestatic DataBaseHandle *handle = nil;//创建单例的方法+ (DataBaseHandle *)shareDataBaseHandle{ @synchronized(self){ if (handle == nil) { handle = [[DataBaseHandle alloc]init]; //让单例对象一创建后就可以访问数据库 [handle openDataBase]; } } return handle;}//返回数据库路径- (NSString *)dataBasePath{ //将数据库文件放到Documents文件夹下 student.sqlite return [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject]stringByAppendingPathComponent:@student.sqlite];}

定义一个全局且在静态区的数据库指针

static sqlite3 *db = nil;

打开数据库的方法

- (void)openDataBase{ //1.先获取数据文件的路径 NSString *dbPath = [self dataBasePath]; //使用sql之前一定要导入libsqlite3.0动态链接类库,其中libsqlite.3.0是快捷方式,导入快捷方式的好处,当版本更新的时候,不再导入新的实体类库了,因为快捷方式永远指向的是最新的实体类库(记得导入头文件) //2.使用sql语句打开数据库
 //[dbPath UTF8String] 将OC字符串转化为C语言字符串 //sqlite3 就是数据库指针 //创建数据库指针db// sqlite3 *db = nil; //方法执行完,内不会对数据库指针db进行初始化,方法执行完,就会存在数据库文件 //此方法会先检测文件路径中有没有对应的数据库文件,没有则创建,有的话直接打开 int result = sqlite3_open([dbPath UTF8String], &db); //SQLITE_OK 说明sql是成功 if (result == SQLITE_OK) {// NSLog(@数据库打开成功); //创建表格 //准备sql语句 NSString *sqlString = @create table if not exists Student(stu_number integer primary key autoincrement,stu_name text,stu_gender text,stu_age integer); //执行sql语句 sqlite3_exec(db, [sqlString UTF8String], NULL, NULL, NULL); }else{ NSLog(@数据库打开失败); } }

关闭数据库的方法

 

- (void)closeDataBase{int result = sqlite3_close(db); NSLog(@%@,(result == SQLITE_OK) ? @关闭成功:@关闭失败);}

 

插入学生对象的接口——增

- (void)insertStudent : (Student *)student{ //1.打开数据库 [self openDataBase]; //2.准备插入的sql语句 NSString *sqlString = @insert into Student(stu_name,stu_gender,stu_age)values(?,?,?); //3.创建数据库管理指针(数据库管理指令集) sqlite3_stmt *stmt = nil; //4.验证sql语句是否正确 //参数1:数据库指针, //参数2:sql语句 //参数3:sql语句的长度写成-1,自动计算sql语句的最大长度,否则要自己计算长度 //参数4:sql语句的管理指针 //参数5:预留参数,未来使用 //5.拿验证的结果,判断是否执行参数绑定的操作 int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL); if (result == SQLITE_OK) { NSLog(@插入成功); //参数1:sql语句管理指针 //参数2:上面sql语句中 ?的位置,?的下标从1开始 //参数3:要绑定的数据 //参数4:数据的长度 //绑定字段stu_name 的数据 sqlite3_bind_text(stmt, 1, [student.name UTF8String], -1, NULL); //绑定字段stu_gender 的数据 sqlite3_bind_text(stmt, 2, [student.gender UTF8String], -1, NULL); //绑定字段stu_age 的数据 sqlite3_bind_int(stmt, 3, (int)student.age); //6.让sql语句执行 sqlite3_step(stmt); } //7.释放掉管理指针 sqlite3_finalize(stmt); //8.关闭数据库 [self closeDataBase];}

返回表格中所有学生的接口——查1

- (NSMutableArray *)selectAllStudent{ //1.打开数据库 [self openDataBase]; //2.准备sql语句 NSString *sqlString = @select * from Student; //3.创建管家指针 sqlite3_stmt *stmt = nil; //4.验证sql语句是否正确int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL); if (SQLITE_OK == result) { NSLog(@查找全部语句成功); //创建可变数组存储找到所有的学生对象 NSMutableArray *array = [NSMutableArray arrayWithCapacity:0]; //SQLITE_ROW 如果等于row说明下一行是有数据的,循环继续,如果不等于SQLITE_ROW ,说明下一行没有数据了,循环结束 while (sqlite3_step(stmt) == SQLITE_ROW) { //依次读出字段的数据 //列的编号是从零开始的 //第一列 int number = sqlite3_column_int(stmt, 0); //第二列 NSString *name = [NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1) ]; //第三列 NSString *gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)]; //第四列 int age = sqlite3_column_int(stmt, 3); //5.创建学生对象并赋值 Student *stu = [[Student alloc]init]; stu.number = number; stu.name = name; stu.gender = gender; stu.age = age; //添加到数组 [array addObject:stu]; //释放 [stu release]; } //6.释放管理指针 sqlite3_finalize(stmt); //关闭数据库 [self closeDataBase]; return array; }else{ sqlite3_finalize(stmt); [self closeDataBase]; return nil; } }

 

根据学号查找学生——查2

 

- (Student *)selectOneStudentByNumber : (NSInteger)number{ //1.打开数据库 [self openDataBase]; //2.准备sql语句 NSString *sqlString = @select * from Student where stu_number = ?; //3.创建管理指针 sqlite3_stmt *stmt = nil; //4.验证sql语句是否正确 int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL); //5.根据验证结果决定执行什么操作 if (result == SQLITE_OK) { //6.绑定参数 sqlite3_bind_int(stmt, 1, (int)number); //7.遍历表格中的数据 //创建model学生对象存储找到的学生信息 Student *stu = [[Student alloc]init]; while (sqlite3_step(stmt) == SQLITE_ROW) { //根据找到的数据给学生的属性赋值 stu.number = number; stu.name =[NSString stringWithUTF8String:(const char *) sqlite3_column_text(stmt, 1)]; stu.gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)]; stu.age = sqlite3_column_int(stmt, 3); } //8.释放管理指针 sqlite3_finalize(stmt); //9.关闭数据库 [self closeDataBase]; return [stu autorelease]; }else{ //10.释放管理指针 sqlite3_finalize(stmt); //11.关闭数据库 [self closeDataBase]; } return nil;}


 

根据唯一标识学号删除学生——删

 

- (void)deleteOneStudentByNumber : (NSInteger )number{ //1.打开数据库 [self openDataBase]; //2.准备删除sql语句 NSString *sqlString = @delete from Student where stu_number = ?; //3.创建数据库管理指针 sqlite3_stmt *stmt = nil; //4.验证sql语句是否正确 int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL); //5.判断是否执行参数绑定的操作 if (result == SQLITE_OK) { //6.绑定传过来的参数 sqlite3_bind_int(stmt, 1, (int)number); //7.执行sql语句 sqlite3_step(stmt); } //8.释放掉管理指针 sqlite3_finalize(stmt); //9.关闭数据库 [self closeDataBase]; }

 

 

根据唯一标识学号修改学生的姓名——改

- (void)updateStudentGender : (NSString *)gender ByNumber : (NSInteger )number{ //1.打开数据库 [self openDataBase]; //2.准备sql语句 NSString *sqlString = @update Student set stu_gender = ? where stu_number = ?; //3.创建数据库管理指针 sqlite3_stmt *stmt = nil; //4.验证sql语句 int result = sqlite3_prepare_v2(db, [sqlString UTF8String], -1, &stmt, NULL); //5.根据验证的结果决定执行的操作 if (result == SQLITE_OK) { //6.绑定参数 sqlite3_bind_text(stmt, 1, [gender UTF8String], -1, NULL); //7.绑定学号 //第二个参数:是 ? 在sql语句中位置,位置从1开始 sqlite3_bind_int(stmt, 2, (int)number); //8.执行sql语句 sqlite3_step(stmt); } //9.释放管理指针 sqlite3_finalize(stmt); //10.关闭数据库 [self closeDataBase]; }

方法的调用:

ViewController.m

 

#import ViewController.h#import DataBaseHandle.h#import [email protected] ViewController ()@property (retain, nonatomic) IBOutlet UITextField *numberField;//学号@property (retain, nonatomic) IBOutlet UITextField *nameField;//姓名@property (retain, nonatomic) IBOutlet UITextField *genderField;//性别@property (retain, nonatomic) IBOutlet UITextField *ageField;//年龄@end
1、添加:增

 

 

- (IBAction)insertStudent:(UIButton *)sender { //判断有一个控件中输入的内容为空,就不让它插入数据 if (0 == self.nameField.text.length || 0 == self.genderField.text.length || 0 == self.ageField.text.length) { return; } //创建学生Student 对象,存储空间中输入的内容 Student *stu = [[Student alloc]init]; stu.name = self.nameField.text; stu.gender = self.genderField.text; stu.age = [self.ageField.text integerValue]; [[DataBaseHandle shareDataBaseHandle]insertStudent:stu]; [stu release]; }

2、更新学生信息:改

 

- (IBAction)updateStudent:(UIButton *)sender { //获取输入框的内容 NSInteger number = [self.numberField.text integerValue]; NSString *gender = self.genderField.text; //调用根据学号修改gender的方法 [[DataBaseHandle shareDataBaseHandle]updateStudentGender:gender ByNumber:number];}

 

3、删除学生:删

 

- (IBAction)deleteStudent:(UIButton *)sender { NSInteger number = [self.numberField.text integerValue]; //调用根据学号删除学生的方法 [[DataBaseHandle shareDataBaseHandle]deleteOneStudentByNumber:number];}

 

 

4、查找全部学生:查1

 

- (IBAction)selectAllStudent:(UIButton *)sender { //调用寻找所有学生 NSMutableArray *contentArray = [[DataBaseHandle shareDataBaseHandle]selectAllStudent]; for (Student *stu in contentArray) { NSLog(@%@,stu); } }

 


5、查找某个学生:查2

 

- (IBAction)selectOneStudent:(id)sender { //获取学号输入框的内容 NSInteger number = [self.numberField.text integerValue]; //调用根据学号获取学生对象 Student *stu = [[DataBaseHandle shareDataBaseHandle]selectOneStudentByNumber:number]; NSLog(@%@,stu);}

记得释放:

 

 

- (void)dealloc { [_numberField release]; [_nameField release]; [_genderField release]; [_ageField release]; [super dealloc];}

总结:一般步骤:1、打开数据库;2、准备sql语句;3、创建管家指针;4、验证sql语句是否正确;5、根据验证结果决定执行什么操作;6、绑定参数;7、遍历表格中的数据(根据学号查找学生);8、释放管理指针;9、关闭数据库

 



相关阅读:
Top