您的位置:首页 > 产品设计 > UI/UE

UI基础整理-20

2016-01-23 09:13 274 查看
第二十节: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) {//这里self和manager是一样的(实例对象)

self = [superinit];//这里不写if(),因为上面alloc就已经将对象创建好了

return self;

}
}//new是alloc和
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'
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: