簡單的數據操作

數據庫
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");
    }
    
}




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