数据管理系统

iOS H5 PHP 


数据库管理系统

  • SQL: SQL 是Structured Query Language(结构化查询语言)的缩写,SQL是专为数据库而建立的操作命令集,是一种功能齐全的数据库语言.

  • 常见的数据库:
  1. My SQL : MySQL是一个精巧的SQL数据库管理系统                  优点:免费,轻量级
  2. Oracle :   甲骨文公司的一款关系数据库管理系统.系统可移植性好,使用方便,功能强.

  • 数据库特征: 
  1. 以一定的方式存储在一起(表结构)
  2. 能为多个用户共享
  3. 具有尽可能少的冗余代码
  4. 与程序彼此独立的数据集合

  • 数据库(Database)是按照数据结构来组织,存储和管理数据的仓库. 

  • 数据库分类
  1. 关系型数据库(主流)
  2. 对象型数据库
  3. 层次性数据库

常用关系型数据库: PC :Orcsle ,My SQL ,SQL Server.Access.DB2  ;嵌入式:SQLite;




SQL语句

  • SQLite是无类型的数据库,可以保存任何类型的数据,对于SQLite来说对字段不指定类型是完全有效的.

  • SQLite近似类规则

  • SQLite字段约束条件: 
  1. NOT NULL -非空(必填选项)
  2. UNIQUE - 唯一(不能重复)
  3. PRIMARY KEY - 主键(一般设置为integer或NSString;特点:1: NOT NULL 不为空 2: UNIQUE 不重复,(唯一标识))
  4. FOREIGN KEY - 外键(该字段作为另一个表的主键,链表查询)
  5. AUTOINCREMENT - 自增量变量(一般设置Integer设置,它会自动根据上一条数据自增)
  6. CHECK -条件检查(确保一列中所有值满足一定条件)
  7. DEFAULT - 默认

表里可以没有主键,主键不是必填选项,当把一个字段设置为PRIMARY KEY 那么这个字段为必填选项 (不可为空,不能重复)
  • SQL语句: 
  1.  建表命令: (Create  table)
  2. 数据插入命令:(Insert)
  3. 数据库更新命令:(Update)
  4. 数据库删除命令:(Delete)
  5. 数据库检索命令:(Select)


数据管理系统

                字段类型一定要填



数据管理系统
注:如果值是字符串或字符类型,需要用单引号括起来


  • update
数据管理系统
update stu set gender = ‘ 女’ where gender = ‘男' ;   整列修改
update stu set gender = ‘ 女’ where name = ‘班长' ; 单条修改

  • delete

数据管理系统
          从stu里删除所有年龄为10的数据

  • 查询select

数据管理系统
          查询一个表里所有数据当   select * from stu where name = ‘班长' ;



单例


#import "DataBaseHandle.h"
static DataBaseHandle *dataBase = nil ;
@interface DataBaseHandle ()
@end
@implementation DataBaseHandle
//单例方法
+ ( DataBaseHandle *)sharedDataBaseHandle{
   
if ( dataBase == nil ) {
       
dataBase = [[ DataBaseHandle alloc ] init ];
    }
   
return dataBase ;
}



@property ( nonatomic , copy ) NSString * dbPath;
//懒加载
//获取路径 documents 文件夹下的一个叫做 person.sqlite
// 重写getter方法
-( NSString *)dbPath{
   
if ( _dbPath == nil ) {
       
NSString *documentPathStr = [ NSSearchPathForDirectoriesInDomains ( NSDocumentDirectory , NSUserDomainMask , YES ) objectAtIndex :0];
       
_dbPath = [documentPathStr stringByAppendingPathComponent : @"person.sqlite" ];
    }
   
return _dbPath ;
}


数据库技术的实现



流程
  •        Linux系统级的SQLite技术实现框架:Build Phases —>Link With Libraries —>添加 —>sqlite —>libsqlite3.0.tbd     

  •     引入头文件
  • 打开数据库
  • 对数据库,并进行操作(执行SQL命令 建表,增删改查)
  • 关闭数据库

代码实现:

  static  sqlite3 *db = nil ;

.h
#import

@interface DataBaseHandle : NSObject

+ (
DataBaseHandle *)sharedDataBaseHandle;
// 返回自身
// 命名 一般用 share default 开头 + 类名

// 打开数据库
-(
void )openDB;
// 关闭数据库
-(
void )closeDB;
// 创建表
-(
void )createTable;

// 插入一条数据
-(
void )insertName:( NSString *)name
           gender:(
NSString *)gender
              age:(
NSInteger )age;

// 通过 UID 更新一个数据
-(
void )updateWithUID:( NSInteger )uid;
// 通过 UID 删除一个数据
-(
void )deleteWithUID:( NSInteger )uid;
// 搜索全部
-(
void )searchAll;
// 根据 name 查询一条数据
-(void)searchWithName:(NSString *)name;
// 根据 gender 查询一条数据
-(
void )searchWithGender:( NSString *)gender;
// 根据 age 查询一条数据
-(void)searchWithAge:(NSInteger)age;

@end



.m
  •  打开数据库
// 初始化一个数据库

-(void)openDB{    
    // 打开数据库的函数 , 在数据库里所有字符串都要变成 utf-8 的格式
   
// 第一个参数 : 路径名 , 第一次用 self. ( 懒加载 ), 再用直接打就行了
   
int result = sqlite3_open ( self . dbPath . UTF8String , & db );
   
if (result == SQLITE_OK ) {
       
NSLog ( @" 打开成功 " );
    }
else {
       
NSLog ( @" 打开失败 " );
    }
}

  •  执行SQL命令
     1.创建表
-( void )createTable{
    // 创建一个 person , 要求字段 : UID integer ( 主键 , 自增 name text ,gender text ,age integer
   
NSString *createString = @"create table if not exists person(uid integer primary key autoincrement not null,name text,gender text,age integer)" ;
   
// 参数 1: 数据库
   
// 参数 2:create 语句 (UTF8 修饰 )
   
// 参数 3: 结果的回调函数
   
// 参数 4: 回调函数的参数
   
// 参数 5: 错误信息
   
int result = sqlite3_exec ( db , createString. UTF8String , NULL , NULL , NULL );
   
if (result == SQLITE_OK ) {
       
NSLog ( @" 创建成功 " );
    }
else {
       
NSLog ( @" 创建失败 %d" ,result);
    }
    NSLog(@"_dbPath === %@",_dbPath);   
}

           2.插入一条数据
// 插入一条数据.m
-( void )insertName:( NSString *)name
           gender:(
NSString *)gender
              age:(
NSInteger )age{
   
// 插入数据的 sql 语句 , 数据不确定 , 所以在 values 里面使用 '?' 代替 , 之后向里面绑定
   
NSString *insertString = @"insert into person(name,gender,age)values(?,?,?)" ;
   
   
// 伴随指针
   
sqlite3_stmt *stmt = nil ;
   
   
// 预执行 SQL 语句
   
// 参数 1: 数据库
   
// 参数 2: SQL 语句
   
// 参数 3: 字节数 ; 如果为负 , 表示取值取到碰到结束符号 ('\000','u000').
   
// 参数 4: 伴随指针 . 会伴随着数据库的操作 , 获取之或者绑定值
   
// 参数 5: 取值的时候如果取得不全 , 怎么余下的存入这里
   
   
   
int result = sqlite3_prepare ( db , insertString. UTF8String , -1, &stmt, NULL );
   
// 如果预执行成功的话 , 那么就要往里面放数据了
   
if (result == SQLITE_OK ) {
       
       
// 向预执行的 SQL 语句里面插入参数 ( 取代 '?' 的位置 )
       
// 参数 1: 伴随指针
       
// 参数 2: 确定替代 '?' 的位置 , 1 开始
       
// 参数 3: 插入数据
       
// 参数 4: 取得字节数
       
// 参数 5: 回调函数
       
sqlite3_bind_text (stmt, 1, name. UTF8String , -1, NULL );
       
//
       
sqlite3_bind_text (stmt, 2, gender. UTF8String , -1, NULL );
       
// int int64 方法
       
sqlite3_bind_int64 (stmt, 3, age);
       
//SQL 语句已写全
       
       
// 执行伴随指针 , 如果为 SQLITE_DONE 代表执行陈宫 , 并且成功的插入数据 .
       
if ( sqlite3_step (stmt) == SQLITE_DONE ) {
           
NSLog ( @" 插入成功 " );
        }
else {
           
NSLog ( @" 插入失败 %d" ,result);
        }
    }
   
// 最后 , 一定要记得释放掉伴随指针
   
sqlite3_finalize (stmt);
}

3.修改一条数据
//
-(
void )updateWithUID:( NSInteger )uid{
   
NSString *updateString = @"update person set name = ' 王军 ' where uid = ?" ;
   
   
// 伴随指针
   
sqlite3_stmt *stmt = nil ;
   
   
int result = sqlite3_prepare ( db , updateString. UTF8String , -1, &stmt, NULL );
   
   
if (result == SQLITE_OK ) {
       
sqlite3_bind_int64 (stmt, 1, uid);
       
if ( sqlite3_step (stmt) == SQLITE_DONE ) {
           
NSLog ( @" 修改成功 " );
        }
    }
   
sqlite3_finalize (stmt);
}

4.删除一条数据
//
-(
void )deleteWithUID:( NSInteger )uid{
   
NSString *deleteString = [ NSString stringWithFormat : @"delete from person where uid = %ld" ,uid];
   
int result = sqlite3_exec ( db , deleteString. UTF8String , NULL , NULL , NULL );
   
   
if (result == SQLITE_OK ) {
       
NSLog ( @" 删除成功 " );
    }
else {
       
NSLog ( @" 删除失败 " );
    }
}

5.查询所有数据
//
-(
void )searchAll{
   
NSString *searchString = @"Select *from person" ;
   
// 伴随指针
   
sqlite3_stmt *stmt = nil ;
   
   
int result = sqlite3_prepare ( db , searchString. UTF8String , -1, &stmt, NULL );
   
   
if (result == SQLITE_OK ) {
       
// 当不知道循环次数 , while
          
// sqlite3_step(stmt) ==SQLITE_ROW 的时候 , 代表还有下一条数据
       
while ( sqlite3_step (stmt) == SQLITE_ROW ) {
           
// 参数 2 : 参数位置 从零开始的
           
int uid = sqlite3_column_int (stmt, 0);
           
NSLog ( @"%d" ,uid);
           
           
NSString *name = [ NSString stringWithUTF8String :( const char *) sqlite3_column_text (stmt, 1)];
           
           
NSString *gender =[ NSString stringWithUTF8String :( const char *) sqlite3_column_text (stmt, 2)];
           
           
NSInteger age = sqlite3_column_int (stmt, 3);
           
           
NSLog ( @"%@" ,name);
           
NSLog ( @"%@" ,gender);
           
NSLog ( @"%ld" ,age);
        }
    }
}



  • 控制器
#import "ViewController.h"
#import "DataBaseHandle.h"
@interface ViewController ()
@end
@implementation ViewController
- ( void )viewDidLoad {
    [
super viewDidLoad ];
   
DataBaseHandle *dataBase = [ DataBaseHandle sharedDataBaseHandle ];
   
    [dataBase
openDB ];
   
    [dataBase
createTable ];
   
    [dataBase
insertName : @" 骚军 " gender : @" " age :38];
   
    [dataBase
updateWithUID :1];
   
    [dataBase deleteWithUID:2];    
}
@end

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值