UI-MySQL

数据库 (主键:唯一,不能为空。外键:表与表之间一一对应,且不重复)
什么是数据库
    以一定方式储存在一起;
    能为多个用户共享;
    具有尽可能小得冗余度;
    与程序彼此独立的数据集合;
常见数据库
     SQL
    My SQL

    Oracle


什么是数据库
        以一定方式储存在一起;
        能为多个用户共享;
       具有尽可能小得冗余度;

       与程序彼此独立的数据集合;


数据库模型
          层次结构模型
          网状结构模型

          关系结构模型

关系数据库:

SQL命令
        数据插入命令(Insert)
        数据更新命令(Update)
        数据删除命令(Delete)

        数据检索命令(Select)

数据插入命令(Insert)
INSERT INTO   `Demo_Table` ( `demo_id` `demo_name` VALUES  (1, 'xiaohao' );
insert into …… values ……———关键字
Demo_Table—————————表名
demo_id和demo_name—————表中的字段名称

1和’xiaohao’——————————要插入的数据


数据更新命令(Update)
UPDATE  `Demo_Table`  SET  `demo_name`  =   'yangyang'   WHERE   `demo_id`=1 ;
update …… set ……where……———关键字
Demo_Table—————————表名
demo_id和demo_name—————表中的字段名称
’yangyang’——————————要更新的数据内容

1—————————————— 要更新的数据检索条件


数据删除命令(Delete)
DELETE FROM  `Demo_Table`  WHERE   `demo_id`=1 ;
delete from ……where……———关键字
Demo_Table—————————表名
demo_id—————表中的字段名称

1—————————————— 要删除的数据检索条件


数据查询命令(Select)
SELECT  *  FROM  `Demo_Table`  WHERE   `demo_id` =1;//*号代表所有内容
select from ……where……———关键字
Demo_Table—————————表名
demo_id—————表中的字段名称

1—————————————— 要查询的数据检索条件


打开终端,创建数据库

Last login: Tue Jul  8 10:33:37 on ttys000

mickey:~ me865$ sqlite3 DataBase//创建DataBase命名的文件

SQLite version 3.7.13 2012-07-17 17:46:21

Enter ".help" for instructions

Enter SQL statements terminated with a ";"

sqlite> ;

sqlite> create table Novel (nid int,author text,bookname text,type text);//创建table,里面有一个以Novel命名的数据库

sqlite> .table//进入table。

Novel//里面有一个名为Novel的数据库

sqlite> insert into Novel (nid ,author,bookname,type) values(1,'天婵土豆','都破 苍穹','玄’);//增加数据

sqlite> select * from Novel;//查询整个数据库

1|天婵土豆|都破苍穹|玄

sqlite> .table

Novel

sqlite> insert into Novel (nid,author,bookname,type) values(2,'天下霸唱','鬼吹灯','玄幻’);//增加一条数据

sqlite> select *from Novel;//查询整个数据库

1|天婵土豆|都破苍穹|玄

2|天下霸唱|鬼吹灯|玄幻

sqlite> select *from Novel where nid=2;//查询id为2的数据

2|天下霸唱|鬼吹灯|玄幻

sqlite> update Novel set bookname= '乡村爱情' where nid=1;//更新数据,讲id=1的bookName改为乡村爱情

sqlite> select *from Novel where nid=1;//查询id=1的数据

1|天婵土豆|乡村爱情|玄

sqlite> delete from Novel where nid=1;//删除id= 1的数据

sqlite> select * from Novel;//查询整个数据库

2|天下霸唱|鬼吹灯|玄幻

sqlite> 

新建工程

  1. 创建一个继承于NSObject的类   :  DataBaseHandler

DataBaseHandler.h

{

    sqlite3 * dbPoint;//指针 指向的是本地数据库文件

    

}

//作为一个数据处理的类,其对象最好为一个单例

+ (DataBaseHandler *)shareInstance;


//开启数据库

- (void)openDB;


//关闭数据库

- (void)closeDB;



//创建表

- (BOOL)creatTable;


//插入数据

- (BOOL)insertTableWithName:(NSString *)name age:(int)age number:(int)number;



//删除数据

- (BOOL)deleteTableWithName:(NSString *)name;



//更新数据

- (BOOL)updateName:(NSString *)scorceName toName:(NSString *)targetName;



//查询数据

- (NSArray *)selectTable;










DataBaseHandler.m

    

+ (DataBaseHandler *)shareInstance

{

    

    static DataBaseHandler * handler = nil;


    //保证线程安全的情况下 进行一次

    static dispatch_once_t onceToken;

    dispatch_once(&onceToken, ^{

        handler = [[DataBaseHandler alloc] init];

        

        //第一次执行的时候 打开数据库  创建单例

        [handler openDB];

        

        


    });


    return handler;

 

}


#warning //开启数据库

- (void)openDB

{

    //1.拼接一个 数据库文件 的地址

    NSArray * arrPath = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);

    

    //沙盒中的documents文件夹

    NSString * documentPath = [arrPath lastObject];

    NSLog(@"%@",documentPath);

    //拼接处地址

    NSString * dbPointPath =  [documentPath stringByAppendingPathComponent:@"lanou.db"];

    NSLog(@"%@",dbPointPath);

  

    //参数1: 数据库的文件路径

    //参数2: sqlite3 指针的地址 &dbPoint   属性

    //[dbPointPath UTF8String] NSString 转成const char * 类型

    int result = sqlite3_open([dbPointPath UTF8String], &dbPoint);

    

    //对数据库结果进行判断

    if (result == SQLITE_OK) {

        

        NSLog(@"打开成功");

        

    }

    else

    {

        NSLog(@"打开失败");

        

    }

    

    

    

}


- (void)closeDB

{

    int result = sqlite3_close(dbPoint);

    

    if (result == SQLITE_OK) {

        

        NSLog(@"关闭数据库成功");

        

    }else

    {

        NSLog(@"关闭数据库失败");

    }

    

}



- (BOOL)creatTable

{

    

    

    //注意两个单引号

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

    

    char * error = nil;

    

    int result = sqlite3_exec(dbPoint, [sqlStr UTF8String], NULL, NULL, &error);

    

    if (result == SQLITE_DONE) {

        return YES;

        

    }

    

    return NO;

    

    

   

    

    

    //1.数据库的替身 缓冲地带  确保更新完成之后会自动的更新数据库

    //作用 :存储所有对数据库的修改

    sqlite3_stmt * stmt = nil;

    

    //2.检查SQL语句,为执行sql语句做的准备

    //参数1:数据库指针

    //参数2:SQL语句  不需要@ 直接双引号里面填写

    //参数3:限制sql语句的长度 不想限制长度写 -1

    //参数4:数据库替身stmt的地址

    int result = sqlite3_prepare(dbPoint, "create table Student (name text,age int,number int primary key)", -1, &stmt, nil);


    //3.判断检查的结果

    if (result == SQLITE_OK) {

        

        

        //4.执行sql语句

       int sqlResult = sqlite3_step(stmt);

        

        

        //判断sqlResult

        if (sqlResult == SQLITE_DONE ) {

            //stmt 数据保存到数据库 指针释放掉

            sqlite3_finalize(stmt);

            return YES;

            

        }

   

    }

    

    //如果检查sql语句失败,stmt指针释放掉

    sqlite3_finalize(stmt);

    

    return  NO;

  

}




#warning //插入

- (BOOL)insertTableWithName:(NSString *)name age:(int)age number:(int)number

{

    

    //注意两个单引号

    NSString * sqlStr = [NSString stringWithFormat:@"insert into Student values ('%@',%d,%d)",name,age,number];

    

    char * error = nil;

    

    int result = sqlite3_exec(dbPoint, [sqlStr UTF8String], NULL, NULL, &error);

    

    if (result == SQLITE_DONE) {

        return YES;

        

    }

    

    return NO;

    

  

    //1.替身

    sqlite3_stmt * stmt = nil;

    

    //注意NULL

    int result = sqlite3_prepare(dbPoint, "insert into Student values (?,?,?)", -1, &stmt, NULL);

    

    //3.给问号 ? 绑定参数和数据

    //参数1 : 替身

    //参数2 : 给哪个位置的 ? 绑定  第一个元素 1

    //参数3: 提供的数据

    sqlite3_bind_text(stmt, 1, [name UTF8String], -1, NULL);

 

    sqlite3_bind_int(stmt, 2, age);

    

    sqlite3_bind_int(stmt, 3, number);

    

    

    //4.sql检查无误

    if (result == SQLITE_OK) {

        

        //5.执行

        if (sqlite3_step(stmt) == SQLITE_DONE) {

            //6.释放

            sqlite3_finalize(stmt);

            return YES;

            

        }

    }

    sqlite3_finalize(stmt);

    return NO;

  

}



#warning //更新

- (BOOL)updateName:(NSString *)scorceName toName:(NSString *)targetName

{

    

    //注意两个单引号

    NSString * sqlStr = [NSString stringWithFormat:@"update Student set name = '%@' where name = '%@'",scorceName,targetName];

    

    char * error = nil;

    

    int result = sqlite3_exec(dbPoint, [sqlStr UTF8String], NULL, NULL, &error);

    

    if (result == SQLITE_DONE) {

        return YES;

        

    }

    

    return NO;

    

 

    //1.替身

    sqlite3_stmt * stmt = nil;

    

    //注意NULL

    int result = sqlite3_prepare(dbPoint, "update Student set name = ? where name = ?", -1, &stmt, NULL);

    

    //3.给问号 ? 绑定参数和数据

    //参数1 : 替身

    //参数2 : 给哪个位置的 ? 绑定  第一个元素 1

    //参数3: 提供的数据

    sqlite3_bind_text(stmt, 1, [scorceName UTF8String], -1, NULL);


    sqlite3_bind_text(stmt, 2, [targetName UTF8String], -1, NULL);

    

    //4.sql检查无误

    if (result == SQLITE_OK) {

        

        //5.执行

        if (sqlite3_step(stmt) == SQLITE_DONE) {

            //6.释放

            sqlite3_finalize(stmt);

            return YES;

            

        }

    }

    sqlite3_finalize(stmt);

    return NO;

  

}







#warning 删除    改进  除了查询之外的方法都可以简化


- (BOOL)deleteTableWithName:(NSString *)name

{

    

    //注意两个单引号

    NSString * sqlStr = [NSString stringWithFormat:@"delete from Student where name = '%@'",name];

    

    char * error = nil;

    

    int result = sqlite3_exec(dbPoint, [sqlStr UTF8String], NULL, NULL, &error);

    

    if (result == SQLITE_DONE) {

        return YES;

        

    }

    

    return NO;

    

    

    

    

#warning 原来的复杂算法

    sqlite3_stmt * stmt = nil;

    

    int result = sqlite3_prepare(dbPoint, "delete from Student where name = ?", -1, &stmt, NULL);

    

    sqlite3_bind_text(stmt, 1, [name UTF8String ], -1, NULL);

    

    

    //4.Sql检查无误

    if (result == SQLITE_OK) {

        

        //5.执行

        if (sqlite3_step(stmt) == SQLITE_DONE) {

            

            //6.保存/释放

            sqlite3_finalize(stmt);

            return YES;

            

        }

    }

    

    sqlite3_finalize(stmt);

    return NO;

  

    

}

#warning //查询   显示所有的

- (NSArray *)selectTable

{

    sqlite3_stmt * stmt = nil;

    

    int result = sqlite3_prepare(dbPoint, "select * from Student", -1, &stmt, NULL);

    

    if (result == SQLITE_OK) {

        

        //数组用来存储结果

        NSMutableArray * arr = [NSMutableArray array];

        

        while (sqlite3_step(stmt) == SQLITE_ROW)

        {

            

            //获取每行的数据

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

            

            NSString * name = [NSString stringWithUTF8String:(const char *)nameChar];//产生第一条数据

            

            int age =  sqlite3_column_int(stmt, 1);

             

            int number = sqlite3_column_int(stmt, 2);

            

            NSString * str = [NSString stringWithFormat:@"姓名:%@,年龄: %d,学号: %d",name,age,number];

            

            NSLog(@"%@",str);

            

            [arr addObject:str];

            

        }

        sqlite3_finalize(stmt);

        return arr;

          

    }

    sqlite3_finalize(stmt);

    return [NSMutableArray array];     

}





  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值