ui学习笔记---第十五天数据库

数据库的使用

常见的数据库有MySQL       SQL Server       SQLite      Oralce等

在iOS开发中通常使用SQLite数据库,这是一个轻量级的数据库,可以在火狐浏览器的工具中创建一个SQLite数据库,并创建表

  

 (1)数据记录筛选: 

sql="select * from 数据表 where 字段名=字段值 orderby 字段名 [desc] " 

sql="select * from 数据表 where 字段名 like '%字段值%' orderby 字段名 [desc]" 

sql="select top10 * from 数据表 where 字段名 orderby 字段名[desc]" 

sql="select * from 数据表 where 字段名 in('值1','值2','值3')" 

sql="select * from 数据表 where 字段名 between 值1 and 值 2" 

(2)更新数据记录: 

sql="update 数据表 set 字段名=字段值 where 条件表达式" 

sql="update 数据表 set 字段1=值1,字段2=值2……字段n=值n where 条件表达式" 

(3)删除数据记录: 

sql="delete from 数据表 where 条件表达式" 

sql="delete from 数据表 "(将数据表所有记录删除) 

(4)添加数据记录: 

sql="insert into 数据表(字段1,字段2,字段3…) values(值1,值2,值3…)" 

sql="insert into 目标数据表 select * from 源数据表"(把源数据表的记录添加到目标数据表)

建立数据库类DB   (DB.h   DB.m)

其中有两个方法 打开数据库方法和关闭数据库方法

//DB.h
#import <Foundation/Foundation.h>
#import <sqlite3.h>
@interface DB : NSObject
//打开数据库
+ (sqlite3 *)open;
//关闭数据库
+ (void)close;

@end
//DB.m
#import "DB.h"
#define kDocuments [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) objectAtIndex:0]
@implementation DB
//打开数据库
//创建一个sqlite3的静态变量
static sqlite3 *db = nil;
+ (sqlite3 *)open
{
    //db不为空,不用再打开db了
    
    if (db != nil) {
        return db;
    }
    //在documents文件夹内建一个Students.sqlite文件路径
    NSString *filePath = [kDocuments stringByAppendingPathComponent:@"Students.sqlite"];
    //包路径
    NSString *file = [[NSBundle mainBundle] pathForResource:@"Students" ofType:@"sqlite"];
    //创建一个文件管理器
    NSFileManager *fileManager =[NSFileManager defaultManager];
    //使用文件控制器把包路径数据库拷贝到documents文件夹内
    
    if ([fileManager fileExistsAtPath:filePath]==NO) {
        
    //判断documents是否已经存在Students.sqlite文件   ,不存在就拷贝
    [fileManager copyItemAtPath:file toPath:filePath error:nil];
    }
    //sqlite3自带的打开数据库方法   filePath从oc字符串转换为c字符串,调用UTF8String方法
        sqlite3_open([filePath UTF8String], &db);
    NSLog(@"%@",filePath);
    return db;
    
}
//关闭数据库
+ (void)close
{
    //调用sqlite3自己方法关闭数据库
    sqlite3_close(db);
    //db置为空
    db = nil;
}
@end

数据管理类StudentManager (StudentManager.h  StudentManager.m)

//StudentManager.h
#import <Foundation/Foundation.h>

@interface StudentManager : NSObject

//- (void)insertName:(NSString *)name Age:(NSString *)age;
- (void)insertName:(NSString *)name Age:(NSInteger)age;
//- (void)select;
- (void)delete:(NSString *)name;
- (void)print;
- (void)update:(NSString *)sex age:(int)age sID:(int)sID;
- (void)updateAge:(NSInteger)age ID:(NSInteger)number;
@end
//StudentManager.m#import "StudentManager.h"
#import "DB.h"
@implementation StudentManager

//- (void)insertName:(NSString *)name Age:(NSString *)age
//{
//    //打开数据库
//    sqlite3 *db = [DB open];
//    
//    //执行插入操作(向表中插入数据)
//    //stmt 用于存放 执行结果(例如,select 查询到得结果)
//    sqlite3_stmt *stmt = nil;
//    //flag 用于检测 prepare 的结果
//    NSString *sql = [NSString stringWithFormat:@"insert into 'BJS140523'(sName,sAge) values (\"%@\",%@)",name,age ];
//    int flag = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);
//    NSLog(@"%d",flag);
//    if (flag == SQLITE_OK) {
//        //执行stmt, 如果SQL是select,sqlite3_step就是获取查到的结果
//        //如果SQL是insert 或者update或者delete  sqlite3_step就是执行SQL
//        sqlite3_step(stmt);
//    }
//    //释放SQL执行过程中开辟的内存(释放资源)
//    sqlite3_finalize(stmt);
//  
//    //关闭数据库
////      [DB close];
//}
- (void)insertName:(NSString *)name Age:(NSInteger)age
{
    //打开数据库
    sqlite3 *db = [DB open];
    
    //执行插入操作(向表中插入数据)
    //stmt 用于存放 执行结果(例如,select 查询到得结果)
    sqlite3_stmt *stmt = nil;
    //flag 用于检测 prepare 的结果
    NSString *sql = [NSString stringWithFormat:@"insert into 'BJS140523'(sName,sAge) values (\"%@\",%d)",name,age ];
    int flag = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);
    NSLog(@"%d",flag);
    if (flag == SQLITE_OK) {
        //执行stmt, 如果SQL是select,sqlite3_step就是获取查到的结果
        //如果SQL是insert 或者update或者delete  sqlite3_step就是执行SQL
        sqlite3_step(stmt);
    }
    //释放SQL执行过程中开辟的内存(释放资源)
    sqlite3_finalize(stmt);
    
    //关闭数据库
    //      [DB close];
}

//- (void)select
//{
//    sqlite3 *db = [DB open];
//}
- (void)delete:(NSString *)name
{
    sqlite3 *db = [DB open];
    sqlite3_stmt *stmt = nil;
    NSString *sql = [NSString stringWithFormat:@"delete from 'BJS140523' where sName = \"%@\"",name];
    int flog = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);
    NSLog(@"%d",flog);
    if (flog == SQLITE_OK) {
        sqlite3_step(stmt);
    }
    sqlite3_finalize(stmt);
}
- (void)print
{
    //打开数据库
    sqlite3 *db = [DB open];
    //执行查询
    sqlite3_stmt *stmt = nil;
    int flog = sqlite3_prepare_v2(db, "select * from 'BJS140523'", -1, &stmt, nil);
    if (flog == SQLITE_OK) {
        //定义可变数组
        //如果取到数据,执行while,如果取不到数据,while的条件就是假
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            //列的编号从0开始
            int sID = sqlite3_column_int(stmt, 0);
            const unsigned char *sName = sqlite3_column_text(stmt, 1);
            int sAge = sqlite3_column_int(stmt, 2);
            const unsigned char *sSex = sqlite3_column_text(stmt, 3);
            NSString *name = [NSString stringWithUTF8String:(const char *)sName];
            NSString *sex = [NSString stringWithUTF8String:(const char *)sSex];
            NSLog(@"%d %@ %d %@",sID,name,sAge,sex);
            //创建学生对象
            //添加到数组中
            //学生对象release
        }
        sqlite3_finalize(stmt);
    }
    //关闭数据库
//    [DB close];
}
- (void)update:(NSString *)sex age:(int)age sID:(int)sID
{
    //打开数据库
    sqlite3 *db = [DB open];
    //执行更新
    sqlite3_stmt *stmt = nil;
    int flog = sqlite3_prepare_v2(db, "update BJS140523 set sSex = ?,sAge = ? where sID = ?", -1, &stmt, nil);
    if (flog == SQLITE_OK) {
        //问号是从1开始的
        sqlite3_bind_text(stmt, 1, [sex UTF8String], -1, NULL);
        sqlite3_bind_int(stmt, 2, age);
        sqlite3_bind_int(stmt, 3, sID);
        sqlite3_step(stmt);
    }
    sqlite3_finalize(stmt);
    //关闭数据库
//    [DB close];
}
- (void)updateAge:(NSInteger)age ID:(NSInteger)number
{
    //打开数据库
    sqlite3 *db = [DB open];
    //执行更新
    sqlite3_stmt *stmt = nil;
    NSString *sql = [NSString stringWithFormat:@"update BJS140523 set sAge = %d where sID = %d",age,number];
    int flog = sqlite3_prepare_v2(db, [sql UTF8String], -1, &stmt, nil);
    if (flog == SQLITE_OK) {
        sqlite3_step(stmt);
    }
    sqlite3_finalize(stmt);
//    sqlite3_exec(<#sqlite3 *#>, <#const char *sql#>, <#int (*callback)(void *, int, char **, char **)#>, <#void *#>, <#char **errmsg#>)
    //关闭数据库
//    [DB class];
}
@end

 

posted on 2014-07-30 22:21  狭义  阅读(231)  评论(0编辑  收藏  举报

导航