您的位置:首页 > 数据库

iOS sqlite数据库的基本使用方法

2015-10-30 19:34 393 查看
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类:

[objc] view
plaincopy

Student.h

@interface Student : NSObject

@property(nonatomic,assign)NSInteger number;

@property(nonatomic,copy)NSString *name;

@property(nonatomic,copy)NSString *gender;

@property(nonatomic,assign)NSInteger age;

@end

Student.m

@implementation 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

通过单例写接口并实现方法:

[objc] view
plaincopy

DataBaseHandle.h

@class 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

[objc] view
plaincopy

#import "DataBaseHandle.h"

#import <sqlite3.h>

#import "Student.h"

@implementation DataBaseHandle

static 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"];

}

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

[objc] view
plaincopy

static sqlite3 *db = nil;

打开数据库的方法

[objc] view
plaincopy

- (void)openDataBase{

//1.先获取数据文件的路径

NSString *dbPath = [self dataBasePath];

//使用sql之前一定要导入libsqlite3.0动态链接类库,其中libsqlite.3.0是快捷方式,导入快捷方式的好处,当版本更新的时候,不再导入新的实体类库了,因为快捷方式永远指向的是最新的实体类库(记得导入头文件)

//2.使用sql语句打开数据库

[objc] view
plaincopy

//[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(@"数据库打开失败");

}

}

关闭数据库的方法

[objc] view
plaincopy

- (void)closeDataBase{

int result = sqlite3_close(db);

NSLog(@"%@",(result == SQLITE_OK) ? @"关闭成功":@"关闭失败");

}

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

[objc] view
plaincopy

- (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

[objc] view
plaincopy

- (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 charchar *) sqlite3_column_text(stmt, 1) ];

//第三列

NSString *gender = [NSString stringWithUTF8String:(const charchar *)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

[objc] view
plaincopy

- (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 charchar *) sqlite3_column_text(stmt, 1)];

stu.gender = [NSString stringWithUTF8String:(const charchar *)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;

}

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

[objc] view
plaincopy

- (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];

}

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

[objc] view
plaincopy

- (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

[objc] view
plaincopy

#import "ViewController.h"

#import "DataBaseHandle.h"

#import "Student.h"

@interface 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、添加:增

[objc] view
plaincopy

- (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、更新学生信息:改

[objc] view
plaincopy

- (IBAction)updateStudent:(UIButton *)sender {

//获取输入框的内容

NSInteger number = [self.numberField.text integerValue];

NSString *gender = self.genderField.text;

//调用根据学号修改gender的方法

[[DataBaseHandle shareDataBaseHandle]updateStudentGender:gender ByNumber:number];

}

3、删除学生:删

[objc] view
plaincopy

- (IBAction)deleteStudent:(UIButton *)sender {

NSInteger number = [self.numberField.text integerValue];

//调用根据学号删除学生的方法

[[DataBaseHandle shareDataBaseHandle]deleteOneStudentByNumber:number];

}

4、查找全部学生:查1

[objc] view
plaincopy

- (IBAction)selectAllStudent:(UIButton *)sender {

//调用寻找所有学生

NSMutableArray *contentArray = [[DataBaseHandle shareDataBaseHandle]selectAllStudent];

for (Student *stu in contentArray) {

NSLog(@"%@",stu);

}

}

5、查找某个学生:查2

[objc] view
plaincopy

- (IBAction)selectOneStudent:(id)sender {

//获取学号输入框的内容

NSInteger number = [self.numberField.text integerValue];

//调用根据学号获取学生对象

Student *stu = [[DataBaseHandle shareDataBaseHandle]selectOneStudentByNumber:number];

NSLog(@"%@",stu);

}

记得释放:

[objc] view
plaincopy

- (void)dealloc {

[_numberField release];

[_nameField release];

[_genderField release];

[_ageField release];

[super dealloc];

}

总结:一般步骤:1、打开数据库;2、准备sql语句;3、创建管家指针;4、验证sql语句是否正确;5、根据验证结果决定执行什么操作;6、绑定参数;7、遍历表格中的数据(根据学号查找学生);8、释放管理指针;9、关闭数据库
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: