zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    Spring bean作用域
    软件类说明文档排版建议
    fit_line_contour_xld拟合直线的五种算法的准确度比较
    .Net优秀开源(5)SqlSugar
    .NET[C#]中实现实体对象深拷贝(克隆/复制)的几种方法
    spring框架学习(14)AOP(中)
    .Net优秀开源(4)Castle.Core
    .Net优秀开源(3)Dapper
    .Net优秀开源(2)Autofac
    .Net优秀开源(1)
  • 原文地址:https://www.cnblogs.com/limicheng/p/3879402.html
Copyright © 2011-2022 走看看