本文共 4115 字,大约阅读时间需要 13 分钟。
iOS中数据持久化分为四种:属性列表、对象归档、SQLite3和Core Data,SQLite3数据库操作是一个必不或缺的技术。
不区分大小写
每一句以;结尾
integer:整型
real:浮点值
text:文本字符串
blob:二进制类型
create 表名(字段名1 字段类型,字段名2 字段类型,字段名3 字段类型,....);create table t_Student(id integer name text,age integer,addr text);
为了方便准确记录数据便于区分每组数据,保证每组数据中有唯一区别的地方就需要添加一个主键约束用来标识记录的唯一性
create table t_Student(id integer primary key autoincrement name text,age integer,addr text);autoincrement 自动增长
not null :规定字段的值不能为null
unique:规定字段的值必须唯一
default:指定字段的默认值
drop table 表名;drop table t_Student;
insert into 表名(字段1,字段2,字段3,...)values(字段1的值,字段2的值,字段3的值,...);insert into t_Student(name,age,addree)values('唐伯虎',788,'宋朝');
update 表名 set 字段1= 字段1的值 where 条件;update t_Student set age = 1000 where name='唐伯虎';
delete from 表名 where 条件;delete from t_Student where age < 100;
select 字段1,字段2,...from表名;select *from 表名;select * from t_Student;select name,age,addree from t_Student;select name from t_Student where age<100;select count(字段)from 表名;select count(*)from t_Student;select count(age)from t_Student;
创建表时加 if not exists 是为了防止重复创建表,当表存在就不会创建表,若不存在就会创建,类似变量的懒加载
条件句中where 字段可以用>、<、=、is、!=、is not、or、and、它们表达的意思跟上学时代的英语数学课堂意思一样,再这里不再赘述。
as可以给表起别名,利用点语法可以访问表内的字段
sqlite3 *db, 数据库句柄,跟文件句柄FILE很类似sqlite3_stmt *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句sqlite3_open(), 打开数据库,没有数据库时创建。sqlite3_exec(), 执行非查询的sql语句sqlite3_bind_text(),设置占位符的内容sqlite3_prepare_v2(),检测查询语句合法性Sqlite3_step(), 在调用sqlite3_prepare后,使用这个函数在记录集中移动。Sqlite3_close(), 关闭数据库文件sqlite3_column_text(), 取text类型的数据。sqlite3_column_blob(),取blob类型的数据sqlite3_column_int(), 取int类型的数据
//在沙盒中创建数据库 NSString *filename = [[NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject] stringByAppendingPathComponent:@"student.sqlite"]; int result =sqlite3_open(filename.UTF8String,&db); if (result==SQLITE_OK) { NSLog(@"成功创建数据库并打开"); //创建一个张表 const char *sql="create table if not exists t_Student(id integer primary key autoincrement,name text,age integer,addr text);"; char *errorMesg=NULL; int result=sqlite3_exec(db,sql,NULL,NULL,&errorMesg); if (result==SQLITE_OK) { NSLog(@"成功创建表"); } else { NSLog(@"创建表失败%s",errorMesg); } } else { NSLog(@"打开数据库失败"); }
NSString *sql=[NSString stringWithFormat:@"insert into t_Student(name,age,addr)values(%@,%@,'%@');",_nameTF.text,_ageTF.text,_addreeTF.text]; char *errorMesg=NULL; int result=sqlite3_exec(db,sql.UTF8String,NULL,NULL,&errorMesg); if (result==SQLITE_OK) { NSLog(@"添加成功"); } else { NSLog(@"添加失败%s",errorMesg); }
const char *sql = "select * from t_Student;"; // 2.定义一个stmt存放结果集 sqlite3_stmt *stmt = NULL; // 3.检测SQL语句的合法性 int result = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL); if (result == SQLITE_OK) { NSLog(@"查询语句是合法的"); sqlite3_bind_text(stmt,1,"student",-1,NULL); while (sqlite3_step(stmt)==SQLITE_ROW) { int sid=sqlite3_column_int(stmt,0); const unsigned char *sname=sqlite3_column_text(stmt,1); int sage=sqlite3_column_int(stmt,2); NSLog(@"%d,%s,%d",sid,sname,sage); } } else { NSLog(@"查询语句不合法"); }
Demo地址为:
Navicat Premium 内部集成了SQLite3可以很友好的进行数据的创建,增添、修改、删除等操作。
下面介绍一下 Navicat Premium的用法(由于CSDN上传附件不能超过60M需要Navicat Premium软件的可以在下面给我留言,私下发给你) 1. 打开Navicat Premium 软件 2. 点击左上角选择SQLite选项 ,在对话框上填写数据库名字选择数据类型、数据库存放地址,如下图: 点击OK。 3.点击main下的Tables,右击选择New Table创建一个表文件 注意:id 设置为Key(唯一标示),并勾选了Auto increment自增长按钮
age设置了默认值为20,如果不输入数字就初始化为默认值
4.点击按钮后设置表的名字为t_Student
5.双击t_Student后点击+
号 添加几组数据 可以观察到我们不为id和age赋值的时候会有默认值 另外我们还可以用数据库语句创建表和添加数据以及查询数据 INSERT into t_Student(name,age,addree)VALUES('乔布斯',64,'苹果公司')