简单的数据操作

数据库
1、以一定的方式存储在一起
2、能为多个用户共享
3、具有尽可能小的冗余度
4、与程序之间彼此独立的数据集合
数据库模型
1、层次结构模型
2、网状结构模型
3、关系结构模型

关系数据库
插入命令:
INser INTO Demo_Table(‘demo_id’,’demo_name’)VALUES(1,’xiaoxiao’);
更新(修改)命令
update …set…… where ………关键字
UPDATE Demo_Table SET demo_name WHERE demo_id = 1;
删除命令:
DELETE FROM Demo_Table WHERE demo_id=1;
查询命令:
selecte *from demo_table where demo_id = 1;
外键:表与表之间一一对应,且不重复的叫做外键
sqlite3基础知识
终端创建数据库
sqlite3 + 数据库名称(自己想要什么写什么)
创建数据库表
create + 表名(列名)

sqlite是轻型数据库,是遵守ACID的关系数据库管理系统,他的设计目标是嵌入式的,占用资源低。
使用SQLite步骤:
1.获取libsqlite库文件
2.引入头文件
3..定义静态的数据库指针
#import <Foundation/Foundation.h>
#import <sqlite3.h>//2.引入sqlite3头文件

//3.定义静态的数据库指针
.
static sqlite3 *dbPoint = nil;

@interface SqlDB : NSObject
+(sqlite3 *)openDB;
@end


sqlite 的方法

sqlite3          *db, 数据库句柄,跟文件句柄FILE很类似

sqlite3_stmt      *stmt, 这个相当于ODBC的Command对象,用于保存编译好的SQL语句
sqlite3_open(),   打开数据库,没有数据库时创建。
sqlite3_exec(),   执行非查询的sql语句
Sqlite3_step(), 在调用sqlite3_prepare后,使用这个函数在记录集中移动。
Sqlite3_close(), 关闭数据库文件
还有一系列的函数,用于从记录集字段中获取数据,如
sqlite3_column_text(), 取text类型的数据。
sqlite3_column_blob(),取blob类型的数据
sqlite3_column_int(), 取int类型的数据

下面给大家演示下我自己写的增删改查:

打开数据库:

#import "SqlDB.h"

@implementation SqlDB

+(sqlite3 *)openDB{


    //如果数据库存在,就直接返回,不用在走下面的代码了。
    if (dbPoint) {
        return dbPoint;
    }
    //Document路径
    NSString *path = [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject];
    path = [NSString stringWithFormat:@"%@/db",path];
    NSLog(@"\npath ==== %@",path);
    //判断数据库是否存在,若存在就不拷贝,反之拷贝。
    if (![[NSFileManager defaultManager] fileExistsAtPath:path]) {
        //获得将要拷贝的文件路径,bundle路径
        NSString *sourcePath = [[NSBundle mainBundle] pathForResource:@"DataBase" ofType:@"sqlite"];
        NSLog(@"\nsourcePath === %@",sourcePath);
        NSError *error = nil;
        [[NSFileManager defaultManager] copyItemAtPath:sourcePath toPath:path error:&error];
        if (error) {
            NSLog(@"error ====  %@",error);
        }
    }
    //创建数据库的指针对象
    sqlite3_open([path UTF8String], &dbPoint);
    return dbPoint;
}

@end
我为增删改查写了类
<pre name="code" class="objc">#import <Foundation/Foundation.h>
@class SqlModel;
@interface NovelDataBase : NSObject
+(NSArray *)selectAllNovel;
+ (SqlModel *)selectWithId:(NSInteger)num;
+ (void)insertWithModel:(SqlModel *)model;
+ (void)updateWithModel:(NSInteger)num bookName:(NSString *)name;
+ (void)deleteWithModel:(NSInteger)num;
@end



查询数据库某一张表所有信息:
<pre name="code" class="objc">+(NSArray *)selectAllNovel{

    NSMutableArray *results = [NSMutableArray array];
    sqlite3 *db = [SqlDB openDB];//获得数据库指针
    sqlite3_stmt *stmt = nil;//创建一个数据库的替身
    //数据库查询语句
    NSString *sqlStr = [NSString stringWithFormat:@"select nv_id,nv_author,nv_bookName,nv_score from Novel"];
    //替身放我数据库得到的结果
    //检验你的sql语句是否正确
    //通过sql语句进行查询,并且将查询结果赋值给替身
    int result = sqlite3_prepare_v2(db, [sqlStr UTF8String], -1, &stmt, NULL);

    //判断查询结果是否正确,如果result的值是SQLITE_OK,则表明准备好statement,接下来执行查询:
    if (result == SQLITE_OK) {
        //while循环把数据一条一条取出来
        while (sqlite3_step(stmt) == SQLITE_ROW) {
            //区第一列的数据,第一个参数是替身,第二个参数是对应sql语句列
            int nid = sqlite3_column_int(stmt, 0);
            const unsigned char *nauthor = sqlite3_column_text(stmt, 1);
            const unsigned char *nbooName = sqlite3_column_text(stmt, 2);
            float nscore = sqlite3_column_double(stmt, 3);

            NSString *bookName = [NSString stringWithUTF8String:(const char *)nbooName];
            NSString *author = [NSString stringWithUTF8String:(const char *)nauthor];
            SqlModel *model = [SqlModel sqlModelNId:nid NBookName:bookName NAuthor:author NScore:nscore];
            [results addObject:model];
        }
    }
    //在返回数组执勤我们要把替身干掉。
    sqlite3_finalize(stmt);
    return results;
}

根据id查找所有信息:

<pre name="code" class="objc">+ (SqlModel *)selectWithId:(NSInteger)num{
    //NSMutableArray *results = [NSMutableArray array];
    sqlite3 *db = [SqlDB openDB];
    sqlite3_stmt *stmt = nil;
    NSString *sqlStr = [NSString stringWithFormat:@"select nv_id,nv_author,nv_bookName,nv_score from Novel where nv_id=%d",num];
    int result = sqlite3_prepare(db, [sqlStr UTF8String], -1, &stmt, NULL);

    if (result == SQLITE_OK) {
        if (sqlite3_step(stmt) == SQLITE_ROW) {
            NSInteger nid = sqlite3_column_int(stmt, 0);
            const unsigned char *nauthor = sqlite3_column_text(stmt, 1);
            const unsigned char *nbooName = sqlite3_column_text(stmt, 2);
            float nscore = sqlite3_column_double(stmt, 3);

            NSString *bookName = [NSString stringWithUTF8String:(const char *)nbooName];
            NSString *author = [NSString stringWithUTF8String:(const char *)nauthor];
            SqlModel *model = [SqlModel sqlModelNId:nid NBookName:bookName NAuthor:author NScore:nscore];
            //[results addObject:model];
            return model;
        }
    }
    sqlite3_finalize(stmt);
    return nil;
}

插入:
#pragma mark insert
+ (void)insertWithModel:(SqlModel *)model{
    sqlite3 *db = [SqlDB openDB];
    //sqlite3_stmt *stmt = nil;
    NSString *sqlStr = [NSString stringWithFormat:@"insert into Novel (nv_id,nv_author,nv_bookName,nv_score)values(%d,'%@','%@',%f)",model.nId,model.nAuthor,model.nBookName,model.nScore];

    int result = sqlite3_exec(db, [sqlStr UTF8String], NULL, NULL, NULL);

    if (result == SQLITE_OK) {
        NSLog(@"Success");
    }

}
修改或更新:

<pre name="code" class="objc">#pragma mark update
+ (void)updateWithModel:(NSInteger)num bookName:(NSString *)name{
    sqlite3 *db = [SqlDB openDB];
    //sqlite3_stmt *stmt = nil;
    NSString *sqlStr = [NSString stringWithFormat:@"update Novel set nv_bookName='%@' where nv_id = %d",name,num];

    int result = sqlite3_exec(db, [sqlStr UTF8String], NULL, NULL, NULL);

    if (result == SQLITE_OK) {
        NSLog(@"Update Success");
    }

}

删除:

<pre name="code" class="objc">#pragma mark delete
+ (void)deleteWithModel:(NSInteger)num {
    sqlite3 *db = [SqlDB openDB];
    //sqlite3_stmt *stmt = nil;
    NSString *sqlStr = [NSString stringWithFormat:@"delete from Novel where nv_id=%d",num];

    int result = sqlite3_exec(db, [sqlStr UTF8String], NULL, NULL, NULL);

    if (result == SQLITE_OK) {
        NSLog(@"Delete Success");
    }
    
}




發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章