标签:
一、数据库管理系统
1、SQL语言概述:SQL是Structured Query Language(结构化查询语言)的缩写。SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言。
2、常见的数据库:
3、数据库特征:
4、数据库简介:
5、表:
二、SQL语句
1、SQLite是无类型的数据库,可以保存任何类型的数据,对于SQLite来说对字段不指定类型是完全有效的。(建议为字段标注类型)
2、SQLite近似类型规则:
3、SQLite字段约束条件
4、SQL语句
// 1.创建表 语法: create table 表名(字段1 约束1 约束2,字段2 约束1 约束2); // 事例: 需求:创建一个student表,表中的字段有学号,姓名,年龄;学号的约束条件:作为主键,自增,不能为空;姓名默认为‘无名氏‘;年龄大于18岁 create table student(s_id integer primary key autoincrement not null,s_name text default ‘无名氏‘, s_age integer check(s_age > 18));
/ 2.插入数据 语法: insert into 表名(字段1, 字段2, ...)values(字段1值, 字段2值, ...); insert into student(s_name, s_age)values(‘小明‘, 20); insert into student(s_name, s_age)values(‘阿萨德‘, 22);
// 3.更新数据 语法: update 表名 set 字段名1 = 修改值1, 字段名2 = 修改值2, .... where 条件 update student set s_age = 25 where s_age = 18;
// 4.删除数据 语法: delete from 表名 where 条件; // 需求:删除年龄为10岁的学生 delete from student where s_age = 10;
// 5.查询数据 语法: select 要查找的字段 from 表名 where 条件; // 查询姓名为阿萨德的所有信息(*表示查表中所有的字段) select *from student where s_name = ‘阿萨德‘;
三、iOS的数据库技术实现
1、开始使用SQLite:
// 引入数据库操作的头文件 #import <sqlite3.h>
// 打开数据库,很多地方都会使用到数据库,所以初始化一个数据库的静态变量 static sqlite3 *db = nil; // 打开数据库 - (void)openDataBase { // 打开数据库,使用int去接收打开的结果 // 第一个参数:filename代表数据库的存储路径 // 第二个参数:二级指针,数据库的地址 int result = sqlite3_open([self.dbPath UTF8String], &db); // result是个枚举值,有很多种情况 if (result == SQLITE_OK) { NSLog(@"数据库打开成功"); }else { NSLog(@"数据库打开失败"); } }
// 创建表 - (void)createTable { // 创建一个person表,字段:uid integer类型 主键 自增 不能为空,name text类型,gender text类型,age integer类型 NSString *createStr = @"create table person(uid integer primary key autoincrement not null, name text, gender text, age integer)"; // 第一个参数:数据库 // 第二个参数:sql语句,需要进行编码 // 第三个参数:结果回调的一个函数 // 第四个参数:回调函数的一个参数 // 第五个参数:错误信息 int result = sqlite3_exec(db, [createStr UTF8String], NULL, NULL, NULL); if (result == SQLITE_OK) { NSLog(@"创建表成功"); }else { NSLog(@"创建表失败"); } // 打印数据库的路径,检验表是否创建成功 NSLog(@"_dbPath = %@", self.dbPath); }
// 通过uid去删除数据 - (void)deleteWithUID:(NSInteger)uid { NSString *deleteStr = [NSString stringWithFormat:@"delete from person where uid = %ld", uid]; int result = sqlite3_exec(db, deleteStr.UTF8String, NULL, NULL, NULL); if (result == SQLITE_OK) { NSLog(@"删除成功"); }else { NSLog(@"删除失败"); } }
// 插入数据 - (void)insertName:(NSString *)name gender:(NSString *)gender age:(NSInteger)age { // 当values不确定的时候用?代替,之后会进行其值绑定的过程 NSString *insertStr = @"insert into person (name, gender, age)values(?, ?, ?)"; // 伴随指针 sqlite3_stmt *stmt = NULL; // 预执行语句 // 第一个参数:数据库 // 第二个参数:sql语句 // 第三个参数:有正负之分,例如:1,代表只往后读一个字节;如果为负,遇到特殊符号才会结束读取(\000,u000) // 第四个参数:伴随指针,会随着数据库的相关操作确定其中?的值 // 第五个参数:取值的时候取得不全,剩下的值都存在这里 int result = sqlite3_prepare(db, insertStr.UTF8String, -1, &stmt, NULL); if (result == SQLITE_OK) { // 在操作成功的方法里进行?值的一些绑定设置 // 第一个参数:伴随指针 // 第二个参数:?的位置(下标从1开始) // 第三个参数:表示要插入的值 // 第四个参数:有正负之分,例如:1,代表只往后读一个字节;如果为负,遇到特殊符号才会结束读取 // 第五个参数:回调函数 sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL); sqlite3_bind_text(stmt, 2, gender.UTF8String, -1, NULL); sqlite3_bind_int64(stmt, 3, age); // sql语句执行完毕 // 执行伴随指针,根据伴随指针的情况判定是否插入成功SQLITE_DONE代表伴随指针执行数据成功 if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"插入成功"); }else { NSLog(@"插入失败"); } }else { NSLog(@"result = %d", result); } // 释放伴随指针 sqlite3_finalize(stmt); }
// 通过uid去更新数据 - (void)updateWithUID:(NSInteger)uid { NSString *updateStr = @"update person set name = ‘悟空‘ where uid = ?"; sqlite3_stmt *stmt = nil; int result = sqlite3_prepare(db, updateStr.UTF8String, -1, &stmt, NULL); if (result == SQLITE_OK) { sqlite3_bind_int64(stmt, 1, uid); if (sqlite3_step(stmt) == SQLITE_DONE) { NSLog(@"数据更新成功"); }else { NSLog(@"数据更新失败"); } }else { NSLog(@"result = %d", result); } sqlite3_finalize(stmt); }
// 查找所有数据 - (void)searchAll { NSString *searchAllStr = @"select *from person"; sqlite3_stmt *stmt = nil; // 预执行 int result = sqlite3_prepare(db, searchAllStr.UTF8String, -1, &stmt, NULL); if (result == SQLITE_OK) { // 因为不知道要查询数据多少次,所以使用while循环 // 第一个参数伴随指针 // 第二个参数表示当前字段的位置[只有带?的是从1开始,其余下标都是从0开始] while (sqlite3_step(stmt) == SQLITE_ROW) { int uid = sqlite3_column_int(stmt, 0); NSLog(@"uid = %d", uid); // 在OC代码中要使用C语言的相关内容,应该使用utf-8 NSString *name = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)]; NSLog(@"name = %@", name); NSString *gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 2)]; NSLog(@"gender = %@", gender); int age = sqlite3_column_int(stmt, 3); NSLog(@"age = %d", age); } }else { NSLog(@"result = %d", result); } sqlite3_finalize(stmt); }
// 根据名字去查找相关的数据信息 - (void)searchWithName:(NSString *)name { NSString *searchStr = @"select uid, gender, age from person where name = ?"; sqlite3_stmt *stmt = nil; int result = sqlite3_prepare(db, searchStr.UTF8String, -1, &stmt, NULL); if (result == SQLITE_OK) { sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL); while (sqlite3_step(stmt) == SQLITE_ROW) { int uid = sqlite3_column_int(stmt, 0); NSLog(@"uid = %d", uid); NSString *gender = [NSString stringWithUTF8String:(const char *)sqlite3_column_text(stmt, 1)]; NSLog(@"gender = %@", gender); int age = sqlite3_column_int(stmt, 2); NSLog(@"age = %d", age); } }else { NSLog(@"result = %d", result); } sqlite3_finalize(stmt); }
// 关闭数据库 - (void)closeDataBase { int result = sqlite3_close(db); if (result == SQLITE_OK) { NSLog(@"数据库关闭成功"); }else { NSLog(@"数据库关闭失败"); } }
标签:
原文地址:http://www.cnblogs.com/soley/p/5457923.html