您的位置:首页 > 产品设计 > UI/UE

IOS_UI_数据库

2015-09-11 20:23 381 查看
用代码的方式在Xcode中引入数据库,创建学生类加入数据库

代码程序如下:

#import <UIKit/UIKit.h>

@interface AppDelegate :
UIResponder <UIApplicationDelegate>

@property (strong,
nonatomic) UIWindow *window;

@end

#import "AppDelegate.h"

#import "MainViewController.h"

@interface
AppDelegate ()

@end

@implementation AppDelegate

- (void)dealloc

{

[_window release];

[super dealloc];

}

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window = [[UIWindow
alloc] initWithFrame:[[UIScreen
mainScreen] bounds]];

// Override point for customization after application launch.

self.window.backgroundColor = [UIColor
whiteColor];

[self.window
makeKeyAndVisible];

[_window release];

MainViewController *main = [[MainViewController
alloc]init];

self.window.rootViewController = main;

[main release];

/*创建 : creat table 表名(列名,类型 primary key(组件的意思 指表内容不能重复))

增加 : insert into 表名 values (,)按创建表里列的顺序写

删除 : delete from 表名 where ( 条件 name = ...)

修改 : update 表名 set(新值)where

update student set name = 'wang' where id = 22 where id = 22

查询 : select * from 表名

select *from student where id = 24

*/

return
YES;

}

#import <UIKit/UIKit.h>

@interface MainViewController :
UIViewController

@end

#import "MainViewController.h"

#import "DBHandler.h"

//@class Student

@interface
MainViewController ()

@end

@implementation MainViewController

- (void)viewDidLoad {

[super
viewDidLoad];

// Do any additional setup after loading the view.

DBHandler *db = [DBHandler
shareInstance];

[db openDB];

//单例对象不能被release

//调用创建表

[db createTable];

// 创建数据

Student *stu = [[Student
alloc]init];

stu.name = @"zahngyang";

stu.number = 22;

[db insertStudent:stu];

[stu release];

NSLog(@"%@",[db
selectAll]);

}

#import <Foundation/Foundation.h>

#import <sqlite3.h>

#import "Student.h"

@interface DBHandler :
NSObject

//成员变量

{

//数据库指针,直接操作本地的数据库文件

sqlite3 *_dbPoint;

}

//单例方法

//引入系统库

+ (DBHandler *)shareInstance;

//打开数据库

- (BOOL)openDB;

//关闭数据库

- (BOOL)closeDB;

//创建表

- (BOOL)createTable;

//增加一条数据

- (BOOL) insertStudent:(Student *)stu;

////删除

//- (BOOL) deleteStudent:(Student *)stu;

////修改

//- (BOOL)updataWithNewStu:(Student *)stu whereNumber:(NSInteger )number;

//查询

- (NSArray *)selectAll;

@end

#import "DBHandler.h"

#import "Student.h"

@implementation DBHandler

+ (DBHandler *)shareInstance

{

//单例方法的实现

// 1. 每一次运行第一次调用这个方法,会创建对象

static DBHandler *dbhandler =
nil;//声明一个空的静态指针

if (dbhandler ==
nil) {

dbhandler = [[DBHandler
alloc]init];

}

// 2. 如果指针不为空 直接返回

return dbhandler;

}

//实现

- (BOOL)openDB

{

//先找数据库文件路径

//取它的文件路径

NSString *docPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,
NSUserDomainMask, YES)lastObject];//取出来是数组

//给数据库拼接文件名便于找到

NSString *dbPath = [docPath
stringByAppendingPathComponent:@"qianqian.db"];

NSLog(@"数据库文件路径:%@",dbPath);

//参数1 : 数据库文件路径[dbPath UTF8String]转换NSString转换成char*

//参数2 : (指针指向路径 如果没有文件就创建一个) 数据库指针的地址

//作用 : 按照路径,如果路径下有文件,就给dbPoint赋值;如果没有文件,就创建一个文件给dbPoint赋值

int result = sqlite3_open([dbPath
UTF8String], &_dbPoint);//char * 字符串指针

// //宏

// SQLITE_OK 作用是找错

NSLog(@"结果: %d",result);

// if (result == SQLITE_OK) {

// NSLog(@"打开数据库成功");

// return YES;

//

// }else{

// NSLog(@"打开数据库失败,错误代码: %d",result);

// return NO;

// }

//封装之后可以这么用

[self
judgeResult:result operation:@"打开数据库"];

return
YES;

}

- (BOOL)closeDB

{

int result = sqlite3_close(_dbPoint);

// NSLog(@"结果: %d",result);

// if (result == SQLITE_OK) {

// NSLog(@"打开数据库成功");

// return YES;

//

// }else{

// NSLog(@"打开数据库失败,错误代码: %d",result);

// return NO;

// }

// return YES;

return [self
judgeResult:result operation:@"关闭数据库"];

}

//封装一个结果判断的方法 两个参数一个是结果 另一个是参数

- (BOOL)judgeResult:(int)result operation : (NSString *)name

{

if (result ==
SQLITE_OK) {

NSLog(@"%@成功",name);

return YES;

}else{

NSLog(@"%@失败,错误代码: %d",name,result);

return NO;

}

}

- (BOOL)createTable

{

//1.创建一个sql语句

NSString *sqlStr = [NSString
stringWithFormat:@"create table student (name text,number integer primary key)"];

//2.执行sql语句

// 1.输出指针执行对象 2.执行的语句 3. 函数指针 回调用

int result = sqlite3_exec(_dbPoint, [sqlStr
UTF8String], NULL,
NULL, NULL);

return [self
judgeResult:result operation:@"创建表"];

}

- (BOOL)insertStudent:(Student *)stu

{

NSString *sqlStr = [NSString
stringWithFormat:@"insert into student values ('%@',%ld)",stu.name,stu.number];

int result = sqlite3_exec(_dbPoint, [sqlStr
UTF8String], NULL,
NULL, NULL);

return[self
judgeResult:result operation:@"增加一条数据"];

}

- (NSArray *)selectAll

{

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

//参数1 : 数据库指针

//参数2 : sql语句

//参数3 : 限制sql语句的长度,-1就是不限

//参数4 : 数据库状态监视

//作为一个临时的数据库,保存sql语句执行的结果,在结束时集中同步到数据库文件中.

sqlite3_stmt *stmt =
nil;

//作用 : 执行sql语句,将结果保存到stmt中

int result = sqlite3_prepare_v2(_dbPoint, [sqlStr
UTF8String], -1, &stmt,
NULL);

//提取结果

//先创建一个可变数组,准备保存结果

NSMutableArray *stuArr = [NSMutableArray
array];

if (result ==
SQLITE_OK) {

//成功就提取数据

while (sqlite3_step(stmt) ==
SQLITE_ROW) {

//数据处理按列处理,按列提取

//参数1:

//参数2 :第几列

const unsigned
char *nameStr = sqlite3_column_text(stmt,
0);

NSString *name = [NSString
stringWithUTF8String:nameStr];

NSInteger number =
sqlite3_column_int(stmt, 1);

// 创建一个student对象

Student *stu = [[Student
alloc]init];

stu.name = name;

stu.number = number;

// 将对象添加到数组

[stuArr addObject:stu];

[stu release];

}

}

//同步到本地数据库后把指针销毁掉

sqlite3_finalize(stmt);

return stuArr;

}

@end

#import <Foundation/Foundation.h>

@interface Student :
NSObject

@property (nonatomic,retain)NSString *name;

@property (nonatomic,assign)NSInteger number;

@end

#import "Student.h"

@implementation Student

- (void)dealloc

{

[_name release];

[super dealloc];

}

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