IOS_UI_数据库

用代码的方式在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


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值