UI一揽子计划 19 (数据库管理系统、SQL语句、iOS 的数据库实现技术)
来源:互联网 发布:mysql爆破 编辑:程序博客网 时间:2024/06/05 04:58
一.数据库管理系统
1. 以一定的方式存储在一起;
2. 能为多个用户共享
3. 具有尽可能小的冗余度
4. 与程序彼此独立的数据集合
二.SQL语句
SQlite常用语句
注:SQlite语句 不区分大小写
1.创建表语句
create table Student (Student 是表名)
IF NOT EXISTS 表不存在 才创建
gender text 表示其类型 字符串
存储类型:
NULL 值是空值
INTEGER 值是整型
REAL 值是浮点数
TEXT 值是文本字符串
BLOB 值是一个二进制类型
number integer primary key not NULL 主键值 如果不操作 自增
create table IF NOT EXISTS lanOuStudent(number integer primary key not NULL, name text not NULL, gender text not NULL, age integer not NULL)
2.插入语句
insert into lanOuStudent 表名
注:单引号 与 顺序对应
insert into lanOuStudent(name ,gender ,age , number) values('%@' ,'%@' , '%ld' , '%ld')
3.删除语句
delete from lanOuStudent 表名
where 根据条件删除
delete from lanOuStudent where age > '%ld'
4.更新语句
update lanOuStudent 表名
where 根据条件更新
set age 更新的字段
update lanOuStudent set age = '%ld' where name = '%@'
5.查询语句
where 根据条件查询 多条件用 and 连接
*表示 查询所有字段
select * from lanOuStudent where name = '%@' and age = '%ld'
select * from lanOuStudent 查询所有
三.iOS 的数据库实现技术
linux系统级的SQLite技术实现框架 libsqlite3.0.dylib
1. 引入<sqlite.h>头文件
2. 打开数据库
3. 执行SQL命令
4. 关闭数据库
重要函数参数:
sqlite3_exec(sqlite3 *, const char *sql, int (*callback)(void *, int, char **, char **), void *, char **errmsg)
第1个参数 是前面open函数得到的指针。
第2个参数 是一条sql语句。
第3个参数 是回调,当这条语句执行之后,sqlite3会去调用你提供的这个函数。
第4个参数 是你所提供的指针,你可以传递任何一个指针参数到这里,这个参数最终会传到回调函数里面,如果不需要传递指针给回调函数,可以填NULL。等下我们再看回调函数的写法,以及这个参数的使用。
第5个参数 是错误信息。
sqlite3_prepare_v2(sqlite3 *db, const char *zSql, int nByte, sqlite3_stmt **ppStmt, const char **pzTail)
int nByte -1 指sql语句长度 可以无限长
sqlite3_stmt 跟随指针 地址
const char **pzTail 截取sql语句未使用部分
绑定查询值
第二个参数 指查询的第几个问号 从1开始
sqlite3_bind_text(stmt, 1, name.UTF8String, -1, NULL);
读取数据
第二个参数 指的是 表中的列数 从0开始
char *name = (char *)sqlite3_column_text(stmt, 1);
// 课堂代码
SQliteManager.h
#import<Foundation/Foundation.h>
#import <sqlite3.h>
#import "LanouStudent.h"
@interfaceSQliteManager : NSObject
+ (SQliteManager*)shareManager;
//如果要使用数据库的话 要引入一个框架 general 最下面的 添加 libsqlite
// libsqlite 3.0.0.dylib框架
#import <sqlite3.h>
#import "LanouStudent.h"
@interfaceSQliteManager : NSObject
+ (SQliteManager*)shareManager;
//如果要使用数据库的话 要引入一个框架 general 最下面的 添加 libsqlite
// libsqlite 3.0.0.dylib框架
//要使用就得导入头文件#import <sqlite3.h>
//打开数据库
// sqlite3表示数据库
- (sqlite3*)openDB;
//关闭数据库
- (void)closeDB;
//创建表格
- (void)createTable;
//插入数据
// sqlite3表示数据库
- (sqlite3*)openDB;
//关闭数据库
- (void)closeDB;
//创建表格
- (void)createTable;
//插入数据
- (void)insertDataWith:(LanouStudent*)model;
//删除数据
//删除20岁以上的
- (void)deleteStudentWithAge:(NSInteger)age;
//更新数据
//根据名字修改年龄
- (void)updateStudentWithName:(NSString*)name setAge:(NSInteger)age;
//查询数据
//名字 和 年龄 查询数据
- (LanouStudent*)queryStudentWhereName:(NSString*)name Age:(NSInteger)age;
- (void)deleteStudentWithAge:(NSInteger)age;
//更新数据
//根据名字修改年龄
- (void)updateStudentWithName:(NSString*)name setAge:(NSInteger)age;
//查询数据
//名字 和 年龄 查询数据
- (LanouStudent*)queryStudentWhereName:(NSString*)name Age:(NSInteger)age;
//查询所有
- (NSArray*)queryAllStudents;
@end
SQliteManager.m
#import"SQliteManager.h"
#import "LanouStudent.h"
@implementationSQliteManager
#import "LanouStudent.h"
@implementationSQliteManager
//初始化方法
//创建单例类 进行数据库的操作方法的封装
+ (SQliteManager*)shareManager
{
static SQliteManager *manager = nil;
if (manager == nil) {
manager = [[SQliteManageralloc]init];
}
return manager;
}
//定义一个静态指针 负责连接数据库
//保证从程序开始知道程序结束才会被释放
+ (SQliteManager*)shareManager
{
static SQliteManager *manager = nil;
if (manager == nil) {
manager = [[SQliteManageralloc]init];
}
return manager;
}
//定义一个静态指针 负责连接数据库
//保证从程序开始知道程序结束才会被释放
staticsqlite3 *db = nil;
//打开数据库
// sqlite3表示数据库
- (sqlite3*)openDB
{
// 判断
// 如果比为空就说明说明数据库存在直接返回就行
if (db!= nil) {
return db;
}
// 不存在 就创建一个数据库
// 需要获取路径
NSString *docuPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];
NSString *dbPath = [docuPath stringByAppendingPathComponent:@"Student.sqlite"];
// 创建数据路
/** // 该函数如果有数据库就打开,没有就创建一个出来
* 参数1.要的是文件的路径
参数2.要的是数据库的地址 需要把OC的字符串转化一下类型
*/
int result = sqlite3_open(dbPath.UTF8String, &db);
// 查看命令返回结果
// SQLITE_OK 表示成功
if (result == SQLITE_OK) {
NSLog(@"数据库创建/连接/打开成功");
NSLog(@"%@", docuPath);
} else {
NSLog(@"数据库创建/连接/打开失败");
}
// sqlite3表示数据库
- (sqlite3*)openDB
{
// 判断
// 如果比为空就说明说明数据库存在直接返回就行
if (db!= nil) {
return db;
}
// 不存在 就创建一个数据库
// 需要获取路径
NSString *docuPath = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory,NSUserDomainMask,YES)lastObject];
NSString *dbPath = [docuPath stringByAppendingPathComponent:@"Student.sqlite"];
// 创建数据路
/** // 该函数如果有数据库就打开,没有就创建一个出来
* 参数1.要的是文件的路径
参数2.要的是数据库的地址 需要把OC的字符串转化一下类型
*/
int result = sqlite3_open(dbPath.UTF8String, &db);
// 查看命令返回结果
// SQLITE_OK 表示成功
if (result == SQLITE_OK) {
NSLog(@"数据库创建/连接/打开成功");
NSLog(@"%@", docuPath);
} else {
NSLog(@"数据库创建/连接/打开失败");
}
return db;
}
//关闭数据库
- (void)closeDB
{
int result = sqlite3_close(db);
if (result == SQLITE_OK) {
NSLog(@"关闭数据库成功");
}else{
NSLog(@"关闭数据库失败");
}
// 如果为空就把 db 置为空
db = nil;
}
//创建表格
- (void)createTable
{
/**
* 创建表格的步骤
1. 打开数据库
2. 写创建表的sql语句
3. 执行这个语句
4. 根据返回值 判断是否成功
5. 关闭数据库
//关闭数据库
- (void)closeDB
{
int result = sqlite3_close(db);
if (result == SQLITE_OK) {
NSLog(@"关闭数据库成功");
}else{
NSLog(@"关闭数据库失败");
}
// 如果为空就把 db 置为空
db = nil;
}
//创建表格
- (void)createTable
{
/**
* 创建表格的步骤
1. 打开数据库
2. 写创建表的sql语句
3. 执行这个语句
4. 根据返回值 判断是否成功
5. 关闭数据库
*/
// 1.
db = [selfopenDB];
// 2.
NSString *sql = @"create table IF NOT EXISTS LanouStudent (number integer primary key not NULL, name text not NULL, age integer not NULL, gender text not NULL)";
// 3.
/**
* 参数 1. db
参数 2. sql 语句
参数 3. 重要函数 (回调,这条语句执行后, sqlite3会去调用你提供的这个函数)
参数 4. 携带的参数
*/
char *error = nil;
int result = sqlite3_exec(db, sql.UTF8String,nil,nil, &error);
// 4.
if (result == SQLITE_OK) {
NSLog(@"创建表格成功");
} else {
NSLog(@"创建表格失败");
}
// 5.
db = [selfopenDB];
// 2.
NSString *sql = @"create table IF NOT EXISTS LanouStudent (number integer primary key not NULL, name text not NULL, age integer not NULL, gender text not NULL)";
// 3.
/**
* 参数 1. db
参数 2. sql 语句
参数 3. 重要函数 (回调,这条语句执行后, sqlite3会去调用你提供的这个函数)
参数 4. 携带的参数
*/
char *error = nil;
int result = sqlite3_exec(db, sql.UTF8String,nil,nil, &error);
// 4.
if (result == SQLITE_OK) {
NSLog(@"创建表格成功");
} else {
NSLog(@"创建表格失败");
}
// 5.
[selfcloseDB];
}
//插入数据
//插入的不是model而是model里面的信息
- (void)insertDataWith:(LanouStudent*)model
{
// 1. 打开数据库
db = [selfopenDB];
// 2. 写sql语句
NSString *sql =[NSStringstringWithFormat:@"insert into LanouStudent (name, gender, age, number) values ('%@','%@','%ld','%ld')", model.name,model.gender,model.age,model.number];
// 3. 执行sql语句
int result = sqlite3_exec(db, sql.UTF8String,nil,nil,nil);
// 4. 判断返回结果
if (result == SQLITE_OK) {
NSLog(@"插入数据成功");
} else {
NSLog(@"插入数据失败");
}
// 5. 关闭数据库
[selfcloseDB];
}
//插入的不是model而是model里面的信息
- (void)insertDataWith:(LanouStudent*)model
{
// 1. 打开数据库
db = [selfopenDB];
// 2. 写sql语句
NSString *sql =[NSStringstringWithFormat:@"insert into LanouStudent (name, gender, age, number) values ('%@','%@','%ld','%ld')", model.name,model.gender,model.age,model.number];
// 3. 执行sql语句
int result = sqlite3_exec(db, sql.UTF8String,nil,nil,nil);
// 4. 判断返回结果
if (result == SQLITE_OK) {
NSLog(@"插入数据成功");
} else {
NSLog(@"插入数据失败");
}
// 5. 关闭数据库
[selfcloseDB];
}
//删除数据
//删除20岁以上的
- (void)deleteStudentWithAge:(NSInteger)age
{
// 打开数据库
db = [selfopenDB];
// 写sql语句
NSString *sql = [NSStringstringWithFormat:@"delete from LanouStudent where age > '%ld'", age];
// 执行sql语句
int result = sqlite3_exec(db, sql.UTF8String,nil,nil,nil);
// 判断返回结果
if (result == SQLITE_OK) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
// 关闭数据库
[selfcloseDB];
}
//更新数据
//根据名字修改年龄
- (void)updateStudentWithName:(NSString*)name setAge:(NSInteger)age
{
// 打开数据库
db = [selfopenDB];
// 写sql语句
NSString *sql = [NSStringstringWithFormat:@"update LanouStudent set age = '%ld' where name = '%@'", age, name];
// 执行sql语句
int result = sqlite3_exec(db, sql.UTF8String,nil,nil,nil);
// 判断返回结果
if (result == SQLITE_OK) {
NSLog(@"更新成功");
} else {
NSLog(@"更新失败");
}
// 关闭数据库
[selfcloseDB];
}
//查询数据
//名字 和 年龄 查询数据
- (LanouStudent*)queryStudentWhereName:(NSString*)name Age:(NSInteger)age
{
// 1.打开数据库
db = [selfopenDB];
// 2.写sql语句
NSString *sql = [NSStringstringWithFormat:@"select * from LanouStudent where name = '%@' and age = '%ld'", name, age];
// 3.创建一个跟随指针(保存sql语句)
sqlite3_stmt *stmt = nil;
// 4.执行语句
// int nByte 表示sql语句的长度 一般填 -1 代表无限长
// const char **pzTail 截取未执行的sql语句
int result = sqlite3_prepare(db, sql.UTF8String, -1, &stmt, NULL);
// 5.判断返回结果
if (result == SQLITE_OK) {
NSLog(@"查询语句执行查询");
// 6.绑定查询条件信息
/**
* 查询的条件是啥类型的 就选择bind_啥类型
1).跟随指针
2).第几个问号,默认从1 开始
3).查询条件的字段名 name.UTF8String(C语言的)
4).长度-1 无穷大
5).绑定后执行的函数
*/
// 绑定的条件1 name
sqlite3_bind_text(stmt,1, name.UTF8String, -1,NULL);
// 绑定的条件2 age
sqlite3_bind_int(stmt,2, -1);
// 7.开始查询
// sqlite3_step(stmt) == SQLITE_ROW
// 如果 stmt 这条语句可以被找到就返回 SQLITE_ROW
while (sqlite3_step(stmt) ==SQLITE_ROW) {
// 8.获取数据
/**
* 参数2).在数据库的表中列数从0开始(自己写的开始)需要打开数据库看一下在第几列
*/
char *name = (char*)sqlite3_column_text(stmt,1);
int age = (int)sqlite3_column_int(stmt,2);
char *gender = (char*)sqlite3_column_text(stmt,3);
int number = (int)sqlite3_column_int(stmt,0);
// 9.给model对象赋值
LanouStudent *model = [[LanouStudentalloc]init];
// 把C语言字符串转化成OC字符串
model.name= [NSStringstringWithUTF8String:name];
model.gender= [NSStringstringWithUTF8String:gender];
model.age= age;
model.number= number;
// 10.释放跟随指针关闭数据库
sqlite3_finalize(stmt);
[selfcloseDB];
// 11.返回数据 并释放对象
return [model autorelease];
}
} else {
- (void)deleteStudentWithAge:(NSInteger)age
{
// 打开数据库
db = [selfopenDB];
// 写sql语句
NSString *sql = [NSStringstringWithFormat:@"delete from LanouStudent where age > '%ld'", age];
// 执行sql语句
int result = sqlite3_exec(db, sql.UTF8String,nil,nil,nil);
// 判断返回结果
if (result == SQLITE_OK) {
NSLog(@"删除成功");
} else {
NSLog(@"删除失败");
}
// 关闭数据库
[selfcloseDB];
}
//更新数据
//根据名字修改年龄
- (void)updateStudentWithName:(NSString*)name setAge:(NSInteger)age
{
// 打开数据库
db = [selfopenDB];
// 写sql语句
NSString *sql = [NSStringstringWithFormat:@"update LanouStudent set age = '%ld' where name = '%@'", age, name];
// 执行sql语句
int result = sqlite3_exec(db, sql.UTF8String,nil,nil,nil);
// 判断返回结果
if (result == SQLITE_OK) {
NSLog(@"更新成功");
} else {
NSLog(@"更新失败");
}
// 关闭数据库
[selfcloseDB];
}
//查询数据
//名字 和 年龄 查询数据
- (LanouStudent*)queryStudentWhereName:(NSString*)name Age:(NSInteger)age
{
// 1.打开数据库
db = [selfopenDB];
// 2.写sql语句
NSString *sql = [NSStringstringWithFormat:@"select * from LanouStudent where name = '%@' and age = '%ld'", name, age];
// 3.创建一个跟随指针(保存sql语句)
sqlite3_stmt *stmt = nil;
// 4.执行语句
// int nByte 表示sql语句的长度 一般填 -1 代表无限长
// const char **pzTail 截取未执行的sql语句
int result = sqlite3_prepare(db, sql.UTF8String, -1, &stmt, NULL);
// 5.判断返回结果
if (result == SQLITE_OK) {
NSLog(@"查询语句执行查询");
// 6.绑定查询条件信息
/**
* 查询的条件是啥类型的 就选择bind_啥类型
1).跟随指针
2).第几个问号,默认从1 开始
3).查询条件的字段名 name.UTF8String(C语言的)
4).长度-1 无穷大
5).绑定后执行的函数
*/
// 绑定的条件1 name
sqlite3_bind_text(stmt,1, name.UTF8String, -1,NULL);
// 绑定的条件2 age
sqlite3_bind_int(stmt,2, -1);
// 7.开始查询
// sqlite3_step(stmt) == SQLITE_ROW
// 如果 stmt 这条语句可以被找到就返回 SQLITE_ROW
while (sqlite3_step(stmt) ==SQLITE_ROW) {
// 8.获取数据
/**
* 参数2).在数据库的表中列数从0开始(自己写的开始)需要打开数据库看一下在第几列
*/
char *name = (char*)sqlite3_column_text(stmt,1);
int age = (int)sqlite3_column_int(stmt,2);
char *gender = (char*)sqlite3_column_text(stmt,3);
int number = (int)sqlite3_column_int(stmt,0);
// 9.给model对象赋值
LanouStudent *model = [[LanouStudentalloc]init];
// 把C语言字符串转化成OC字符串
model.name= [NSStringstringWithUTF8String:name];
model.gender= [NSStringstringWithUTF8String:gender];
model.age= age;
model.number= number;
// 10.释放跟随指针关闭数据库
sqlite3_finalize(stmt);
[selfcloseDB];
// 11.返回数据 并释放对象
return [model autorelease];
}
} else {
NSLog(@"查询语句执行失败");
}
// 12.关闭数据库
[selfcloseDB];
// 12.关闭数据库
[selfcloseDB];
return nil;
}
//查询所有学生
- (NSArray*)queryAllStudents
{
// 1. 打开数据库
db = [selfopenDB];
// 2. 写sql语句
NSString *sql = [NSStringstringWithFormat:@"select * from LanouStudent"];
// 3. 设置跟随指针
sqlite3_stmt *stmt = nil;
// 4. 执行sql语句
int result = sqlite3_prepare(db, sql.UTF8String, -1, &stmt, nil);
// 5. 判断返回结果
if (result == SQLITE_OK) {
NSLog(@"查询语句成功");
// 6. 绑定
// 没有查询条件 所以是空
// 创建一个数组 并保存查询后的model
NSMutableArray *array = [NSMutableArrayarray];
// 7. 开始查询
while (sqlite3_step(stmt) ==SQLITE_ROW) {
// 8. 读取数据
char *name = (char*)sqlite3_column_text(stmt,1);
char *gender = (char*)sqlite3_column_text(stmt,3);
int number = sqlite3_column_int(stmt,0);
int age = sqlite3_column_int(stmt,2);
// 9. model赋值
LanouStudent *student = [[LanouStudentalloc]init];
student.name= [NSStringstringWithUTF8String:name];
student.gender= [NSStringstringWithUTF8String:gender];
student.number= number;
student.age= age;
// 10. model装进数字
//查询所有学生
- (NSArray*)queryAllStudents
{
// 1. 打开数据库
db = [selfopenDB];
// 2. 写sql语句
NSString *sql = [NSStringstringWithFormat:@"select * from LanouStudent"];
// 3. 设置跟随指针
sqlite3_stmt *stmt = nil;
// 4. 执行sql语句
int result = sqlite3_prepare(db, sql.UTF8String, -1, &stmt, nil);
// 5. 判断返回结果
if (result == SQLITE_OK) {
NSLog(@"查询语句成功");
// 6. 绑定
// 没有查询条件 所以是空
// 创建一个数组 并保存查询后的model
NSMutableArray *array = [NSMutableArrayarray];
// 7. 开始查询
while (sqlite3_step(stmt) ==SQLITE_ROW) {
// 8. 读取数据
char *name = (char*)sqlite3_column_text(stmt,1);
char *gender = (char*)sqlite3_column_text(stmt,3);
int number = sqlite3_column_int(stmt,0);
int age = sqlite3_column_int(stmt,2);
// 9. model赋值
LanouStudent *student = [[LanouStudentalloc]init];
student.name= [NSStringstringWithUTF8String:name];
student.gender= [NSStringstringWithUTF8String:gender];
student.number= number;
student.age= age;
// 10. model装进数字
[arrayaddObject:student];
// 11. 释放model
[student release];
[student release];
}
// 12.释放跟随指针
sqlite3_finalize(stmt);
// 13.关闭数据库
// 13.关闭数据库
[selfcloseDB];
// 14. 返回数组
return array;
}else {
NSLog(@"查询语句失败");
}
// 15.关闭数据库
[selfcloseDB];
// 16. 返回 nil
return nil;
NSLog(@"查询语句失败");
}
// 15.关闭数据库
[selfcloseDB];
// 16. 返回 nil
return nil;
}
@end
0 0
- UI一揽子计划 19 (数据库管理系统、SQL语句、iOS 的数据库实现技术)
- iOS开发:数据库管理系统 :SQL语句 与 SQLite嵌入式数据库
- SQLServer数据库管理的常用SQL语句
- 数据库SQL语句实现
- 数据库管理常用sql语句
- 数据库管理常用sql语句
- Sql数据库的Web管理系统源码
- SQL语句实现连接远程的数据库
- SQL语句数据库的实现课后题
- iOS数据库常用sql语句
- iOS学习 数据库 SQL语句
- UI day 18 数据库SQL语句
- 数据库管理系统的设计与实现
- [iOS 数据库 转 ]iOS中 常用的SQL语句
- IOS 数据库管理系统(SQLite)
- IOS 数据库管理系统(SQLite)
- 关于mysql数据库以及sql语句的优化技术
- 常用的数据库管理SQL语句(一)
- UI一揽子计划 18 (沙盒机制、简单对象写入文件、NSFileMange、复杂对象写入文件)
- 方法重载和方法重写的区别
- iOS 9 错误解决方法
- android中editText弹出软键盘并且根据editText中是否是内容来控制按钮的可用性
- MYSQL 的常用操作
- UI一揽子计划 19 (数据库管理系统、SQL语句、iOS 的数据库实现技术)
- Linux同步机制 - 基本概念(死锁,活锁,饿死,优先级反转,护航现象)
- Hibernate 处理 mysql 大文本
- hdu1059 Dividing(多重背包+二进制优化)
- leetcode 110 Balanced Binary Tree(难易度:Easy)
- 互相关法提取基音
- UI一揽子计划 20 (豆瓣实战之图片缓存 、豆瓣实战之详情界面(自适应行高) 、豆瓣实战之登陆注销、刘新林分享之UIAlertController)
- 杭电acm2086
- gsl矩阵运算