标签:additional loading interface 数据库 import
数据库的使用,和单例的使用
MainViewController.m
#import "MainViewController.h"
#import "DataBaseHandler.h"
@interface MainViewController ()
@end
@implementation MainViewController
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil
{
self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil];
if (self) {
// Custom initialization
}
return self;
}
- (void)viewDidLoad
{
[super viewDidLoad];
// Do any additional setup after loading the view.
self.view.backgroundColor = [UIColor cyanColor];
//数据库的使用
//使用单例方法
DataBaseHandler *dbHandler = [DataBaseHandler shareInstance];
}
- (void)didReceiveMemoryWarning
{
[super didReceiveMemoryWarning];
// Dispose of any resources that can be recreated.
}
/*
#pragma mark - Navigation
// In a storyboard-based application, you will often want to do a little preparation before navigation
- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
// Get the new view controller using [segue destinationViewController].
// Pass the selected object to the new view controller.
}
*/
@endDataBaseHandler.h
#import <Foundation/Foundation.h>
#import <sqlite3.h>
#import "Student.h"
//对所有数据库的操作都在这个类中处理
//把这个类写成单例类(在一个应用程序中,只会产生一个对象)
@interface DataBaseHandler : NSObject
{
//创建一个数据指针,指向本地的数据库文件
sqlite3 *dbPoint;
}
//单例方法
+ (DataBaseHandler *)shareInstance;
//在进行数据库的增删改查操作之前,需要打开数据库(dbPoint跟本地的数据库文件连接起来)
- (void)openDB;
- (void)closeDB;
//创建表
- (void)createTable;
//添加
- (void)insertStudent:(Student *)student;
//查询
- (NSArray *)selectAllStudents;
@endDataBaseHandler.m
#import "DataBaseHandler.h"
@implementation DataBaseHandler
+ (DataBaseHandler *)shareInstance
{
//static 一个应用程序执行期间,只会执行一次
static DataBaseHandler *dbHandler = nil;
if (dbHandler == nil) {
//如果指针指向空地址,就创建一个对象
dbHandler = [[DataBaseHandler alloc] init];
[dbHandler openDB];
[dbHandler createTable];
}
return dbHandler;
}
- (void)openDB
{
//打开数据库的函数
NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES)lastObject];
//拼接一个数据库的文件路径
NSString *dbPath = [docPath stringByAppendingPathComponent:@"dataBase.db"];
//参数1:数据库文件的路径 参数2:数据库指针的地址
int result = sqlite3_open([dbPath UTF8String], &dbPoint);
//SQLITE_OK查看错误信息
NSLog(@"%d", result);
NSLog(@"%@", dbPath);
}
- (void)closeDB
{
sqlite3_close(dbPoint);
}
- (void)createTable
{
//执行SQL语句的函数
NSString *sql = [NSString stringWithFormat:@"create table student (name text, id integer primary key, age float)"];
//参数1:数据库的指针
//参数2:要执行的sql语句
//参数3:
//参数4:
//参数5:
int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);
NSLog(@"创建结果%d", result);
}
- (void)insertStudent:(Student *)student
{
NSString *sql = [NSString stringWithFormat:@"insert into student values(‘%@‘, %d, %f)",student.name,student.number, student.age];
int result = sqlite3_exec(dbPoint, [sql UTF8String], NULL, NULL, NULL);
NSLog(@"执行结果%d", result);
}
- (NSArray *)selectAllStudents
{
//1.创建一个数据库指针的替身
//替身作为一个临时的数据库指针,保存所有对数据库的操作,最终确认无误后写入本地数据库
sqlite3_stmt *stmt = nil;
NSString *sql = [NSString stringWithFormat:@"select * from student"];
//2.检查sql语句,准备执行
//作用:把替身和数据库指针连接起来
//参数1:数据库指针
//参数2:sql语句
//参数3:闲置sql语句的长度 (-1)为不限制
//参数4:替身的指针
int result = sqlite3_prepare_v2(dbPoint, [sql UTF8String], -1, &stmt, NULL);
//对sql语句的检查结果进行判断
if (result == SQLITE_OK) {
NSMutableArray *array = [NSMutableArray array];
//如果当符合SQL语句查询条件的结果有多行,就执行循环体的代码
while (sqlite3_setp(stmt) == SQLITE_ROW) {
//参数1:替身 参数2:取得是第几列的值
const unsigned char* nameStr = sqlite3_column_text(stmt, 0);
NSString *name = [NSString stringWithUTF8String:(const char*)nameStr];
//把拿到的nsstring数据给一个学生对象赋值
Student *stu = [[Student alloc] init];
stu.name = name;
stu.number = sqlite3_column_int(stmt, 1);
stu.age = sqlite3_column_double(stmt, 2);
//把创建好的学生对象添加到数据中
[array addObject:stu];
[stu release];
}
//释放替身的内存占用,将替身的所有操作应用到底层数据库文件
sqlite3_finalize(stmt);
return array;
}
//如果失败,返回空值
sqlite3_finalize(stmt);
return nil;
}
@endStudent.h
#import <Foundation/Foundation.h> @interface Student : NSObject @property (nonatomic , retain)NSString *name; @property (nonatomic , assign)NSInteger number; @property (nonatomic , assign)float age; @end
Student.m
#import "Student.h"
@implementation Student
- (void)dealloc
{
[_name release];
[super dealloc];
}
@end本文出自 “小刘_Blog” 博客,请务必保留此出处http://liuyafang.blog.51cto.com/8837978/1557038
标签:additional loading interface 数据库 import
原文地址:http://liuyafang.blog.51cto.com/8837978/1557038