SQLite的简单封装
2015-09-26 19:16
375 查看
// // StudentTool.h // SQLite的封装 // 学生数据的CRUD #import <Foundation/Foundation.h> @class Student; @interface StudentTool : NSObject + (BOOL)addStudent:(Student *)student; /** * 获得所有学生 * * @return 数组中装着都说Student模型 */ + (NSArray *)students; @end
// // StudentTool.m // SQLite的封装 #import "StudentTool.h" #import "Student.h" #import <sqlite3.h> @implementation StudentTool /** * 全局变量 static的作用:能保证 _db 这个变量只被StudentTool.m直接访问 */ static sqlite3 *_db; + (void)initialize { //0.获取沙盒中的数据库文件名 NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"]; //1.创建(打开)数据库(如果数据库不存在,会自动创建) int result = sqlite3_open(filename.UTF8String, &_db); if (result == SQLITE_OK) { NSLog(@"成功打开数据库"); //3.建表 const char *sql = "create table if not exists t_student (id integer primary key autoincrement,name text,age integer);"; char *errorMesg = NULL; int result = sqlite3_exec(_db, sql, NULL, NULL, &errorMesg); if (result == SQLITE_OK) { NSLog(@"成功创建t_student表"); }else{ NSLog(@"创建t_student表失败:%s",errorMesg); } }else{ NSLog(@"打开数据库失败"); } } /** * 添加学生 * * @param student 需要添加的学生 */ + (BOOL)addStudent:(Student *)student { NSString *sql = [NSString stringWithFormat:@"insert into t_student (name,age) values ('%@',%d);",student.name,student.age]; char *errorMesg = NULL; int result = sqlite3_exec(_db, sql.UTF8String, NULL, NULL, &errorMesg); return result == SQLITE_OK; } + (NSArray *)students { //0.定义数组 NSMutableArray *students = nil; //1.定义sql语句 const char *sql = "select id,name,age form t_student;"; //2.定义一个stmt存放结果集 sqlite3_stmt *stmt = NULL; //3.检测SQL语句的合法性 int ressult = sqlite3_prepare_v2(_db, sql, -1, &stmt, NULL); if (ressult == SQLITE_OK) { NSLog(@"查询语句合法"); students = [NSMutableArray array]; //4.执行SQL语句 int stepResult = sqlite3_step(stmt); while (stepResult == SQLITE_ROW) { Student *student = [[Student alloc] init]; //获得第0列的id student.ID = sqlite3_column_int(stmt, 0); //获得第1列的name const unsigned char *sname = sqlite3_column_text(stmt, 1); student.name = [NSString stringWithUTF8String:(const char *)sname]; //获得第2列的age student.age = sqlite3_column_int(stmt, 2); //添加到数组 [students addObject:student]; } }else{ NSLog(@"查询语句非法"); } return students; } @end
// // Student.h // SQLite的封装 // 学生模型 #import <Foundation/Foundation.h> @interface Student : NSObject /** * 学生的id */ @property(nonatomic,assign) int ID; /** * 学生姓名 */ @property(nonatomic,copy) NSString *name; /** * 学生的年龄 */ @property(nonatomic,assign) int age; @end
// // ViewController.m // SQLite的封装 #import "ViewController.h" #import "StudentTool.h" #import "Student.h" @interface ViewController () - (IBAction)insert; - (IBAction)query; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; // Do any additional setup after loading the view, typically from a nib. } - (IBAction)insert { //添加30条数据 for (int i=0; i<30; i++) { //创建学生 Student *student = [[Student alloc] init]; student.name = [NSString stringWithFormat:@"jack-%d",arc4random()%100]; student.age = arc4random()%100; //添加学生 BOOL result = [StudentTool addStudent:student]; if (result) { NSLog(@"添加成功"); } } } - (IBAction)query { NSArray *students = [StudentTool students]; for (Student *stu in students) { NSLog(@"%d %@ %d",stu.ID,stu.name,stu.age); } } @end
相关文章推荐
- MySQL学习笔记(三)--运算符
- 请不要用SECONDS_BEHIND_MASTER来衡量MYSQL主备的延迟时间(转)
- sql2000的jdbc连接
- MYSQL做数据仓库的性能瓶颈
- Hibernate sql操作的三种方法 HQL QBC Native SQL查询
- repcached实现memcached主从复制
- Oracle性能优化顺序表名称来选择最有效的学习笔记
- sql的权限有哪些
- Ubuntu 12.04(32位)安装Oracle 11g(32位)全过程以及几乎所有问题的解决办法
- Oracle 11.2.0.1.0 静默安装
- Oracle数据库 常见的SQL题,复习
- 使用elk+redis搭建nginx日志分析平台
- oracle 11g 按时间建分区表
- MySql基本使用方法
- linux redis安装源码包安装
- mongodb授权和权限
- Oracle常用函数
- 数据库的相关概念及操作
- Spark修炼之道(进阶篇)——Spark入门到精通:第八节 Spark SQL与DataFrame(一)
- C#中实现一次执行多条带GO的sql语句实例