UI基础整理-20


第二十节:sqlite


创建单例对象(数据库只需要一个就可以,所以创建单例对象)
//  SHDBManager.h
#import <Foundation/Foundation.h>
#import
<sqlite3.h>
#import
"Student.h"
@interface SHDBManager : NSObject<NSCopying,NSMutableCopying>

/**
 * 
创建单例的静态方法
 *
 *  @return
返回单例对象
 */
static SHDBManager *manager = nil;
//因为数据库的打开和关闭都是一个,所以写成全局的
static sqlite3 *db = nil;
+ (instancetype)shareManager ;
创建单例的时候需要写线程保护
      staticdispatch_once_t onceToken;
    dispatch_once(&onceToken, ^{
        //这里面的代码只会运行一次
       manager = [selfnew];
       
    });
这里还需要完善单例
重写alloc和init方法
     //重写alloc方法
+ (
instancetype)allocWithZone:(struct_NSZone *)zone{
   
    
//  @synchronized保护对象在多线程的情况下同时只有一个线程来访问
   
   
@synchronized(manager) {
       
       
if (!manager) {
           
//父类指针指向子类对象
           
manager = [superallocWithZone:zone];
        }
       
return manager
;
    }

}
- (
instancetype)init{
   
   
@synchronized(self) {//这里selfmanager是一样的(实例对象)
       
       
self = [superinit];//这里不写if(),因为上面alloc就已经将对象创建好了
       
return self;
    }
}//newalloc init的结合
解决copy问题(需要遵循协议)
     在外界进行copy或mutablecopy时返回自己
- (id)copyWithZone:(NSZone*)zone{
   
   
return self;
}

- (
id)mutableCopyWithZone:(NSZone*)zone{
   
   
return self;
}

- (
id)copy{
   
   
return self;
}
- (
id)mutableCopy{
   
   
return self;
}

数据库操作:
     1.打开数据库(有就打开数据库,没有就创建数据库)
          int result = sqlite3_open(path.UTF8String,&db);
     2.关闭数据库(所有的操作都是在关闭数据前操作的)
          int result = sqlite3_close(db);
     3.创建表
          SQL语句:
            NSString sqlWord = @"create table if not exists 's_student' ('number' integer                               primary key autoincrement not null unique,'name' text not null,'age' integer default 18,'gender' text default 男,'score' real not null)";"
        执行SQL语句:
            int result = sqlite3_exec(db,sqlword.UTF8String);
     4.增
          SQL语句:
            [NSString stringWithFormat:@"insert into s_student values(%lu,'%@',%lu,'%@',%lf)",number,name,age,gender,score];
        执行语句:
            sqlite3_exec(db,sqlWord.UTF8String,NULL,NULL,NULL)
     5.删
          SQL语句:
            delegate from s_student number = 1
          执行语句同增加
     6.改
          SQL语句:
            update s_student set name = @"张三" where number = 1
          执行语句同删
     7.查(※)









sqlite数据库常用SQL语句


创建表
CREATE TABLE IF NOT EXISTS "student" ("number" INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL, "name" TEXT NOT NULL, "age" INTEGER NOT NULL, "gender" TEXT DEFAULT M);


创建一个表,如果不存在才创建(IF NOT EXISTS),表名是Student 字段有number(数字,主键,自增,不能为空),name(文本,不能为空),age(数字,不能为空),gender(文本,默认值M)
 

第一种,整体添加
INSERT INTO student VALUES (3,’宋立龙’,19,’M’)
向student表中添加数据,数据的值先后顺序要和已有的字段一一对应,且不可缺少
第二种,部分添加
INSERT INTO student (name,age,gender) VALUES (‘宋立龙’,30,'M')
向student表中添加数据,字段和值对应



第一种,整体删除
DELETE FROM student
第二种,根据条件删除
DELETE FROM student WHERE number = 1



第一种,整体修改
UPDATE student SET age = 20
第二种,条件修改
UPDATE student SET age = 20 WHERE name = 'lisi'



第一种,查询全部
SELECT * FROM student
第二种,条件查询
SELECT *FROM student  WHERE name = 'lisi'


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值