• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • SQLite

    前言

    • 采用 SQLite 數據庫來存儲數據。SQLite 作為一中小型數據庫,應用 iOS 中,跟前三種保存方式相比,相對比較復雜一些。
    • 注意:寫入數據庫,字符串可以采用 char 方式,而從數據庫中取出 char 類型,當 char 類型有表示中文字符時,會出現亂碼。
    • 這是因為數據庫默認使用 ASCII 編碼方式。所以要想正確從數據庫中取出中文,需要用 NSString 來接收從數據庫取出的字符串。
    • sqlite 的方法:
    sqlite3 *db             數據庫句柄,跟文件句柄很類似
    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 類型的數據

    1、環境配置

    • 1.1 添加動態庫

      • 在 TARGETS => Build Phases => Link Binary With Libraries => +(添加) => Add Other... => command + shit + g => 輸入 /usr/lib 找到一下文件并添加:libsqlite3.0.dylib
        1213778-20180814212647637-1992572307.png
        1213778-20180814212658350-346235961.png
      • 或者在 TARGETS -> Build Settings -> Linking -> Other Linker Flags 中添加 -l< 所需 dylib 的名稱 >:-lsqlite3.0
        1213778-20180814212701436-2064979759.png
      • 添加頭文件:
      #import "sqlite3.h"
    • 1.2 配置數據庫路徑

      // 設置數據庫文件路徑
      NSString *databaseFilePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Desktop/mydb.sqlite"];
      
      // 創建數據庫句柄
      sqlite3 *db;
      
      char *error;

    2、打開數據庫

    ``` Objective-C
    // 打開數據庫,數據庫文件不存在時,自動創建文件
    if (sqlite3_open([databaseFilePath UTF8String], &db) == SQLITE_OK) {
        NSLog(@"sqlite dadabase is opened.");
    } else {
        NSLog(@"sqlite dadabase open fail.");
    }
    ```

    3、創建數據表

    ``` Objective-C
    /*
    sql 語句,專門用來操作數據庫的語句。
    create table if not exists 是固定的,如果表不存在就創建。
    myTable() 表示一個表,myTable 是表名,小括號里是字段信息。
    字段之間用逗號隔開,每一個字段的第一個單詞是字段名,第二個單詞是數據類型,primary key 代表主鍵,autoincrement 是自增。
    */
    NSString *createSql = @"create table if not exists myTable(id integer primary key autoincrement, name text, age integer, address text)";
    if (sqlite3_exec(db, [createSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {
        NSLog(@"create table is ok.");
    } else {
        NSLog(@"error: %s", error);
        // 每次使用完畢清空 error 字符串,提供給下一次使用
        sqlite3_free(error);
    }
    ```

    4、插入記錄

    NSString *insertSql = @"insert into myTable(name, age, address) values('小新', '8', '東城區')";
    if (sqlite3_exec(db, [insertSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {
        NSLog(@"insert operation is ok.");
    } else {
        NSLog(@"error: %s", error);
        // 每次使用完畢清空 error 字符串,提供給下一次使用
        sqlite3_free(error);
    }

    5、修改記錄

    NSString *updateSql = @"update myTable set name = '小白', age = '10', address = '西城區' where id = 2";
    if (sqlite3_exec(db, [updateSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {
        NSLog(@"update operation is ok.");
    } else {
        NSLog(@"error: %s", error);
        // 每次使用完畢清空 error 字符串,提供給下一次使用
        sqlite3_free(error);
    }

    6、刪除記錄

    
    NSString *deleteSql = @"delete from myTable where id = 3";
    if (sqlite3_exec(db, [deleteSql UTF8String], NULL, NULL, &error) == SQLITE_OK) {
        NSLog(@"delete operation is ok.");
    } else {
        NSLog(@"error: %s", error);
        // 每次使用完畢清空 error 字符串,提供給下一次使用
        sqlite3_free(error);
    }

    7、查詢記錄

    
    sqlite3_stmt *statement;
    // @"select * from myTable"  查詢所有 key 值內容
    NSString *selectSql = @"select id, name, age, address from myTable";
    if (sqlite3_prepare_v2(db, [selectSql UTF8String], -1, &statement, nil) == SQLITE_OK) {
        while(sqlite3_step(statement) == SQLITE_ROW) {
            // 查詢 id 的值
            int _id = sqlite3_column_int(statement, 0);
            // 查詢 name 的值
            NSString *name = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 1)];
            // 查詢 age
            int age = sqlite3_column_int(statement, 2);
            // 查詢 name 的值
            NSString *address = [NSString stringWithUTF8String:(char *)sqlite3_column_text(statement, 3)];
            NSLog(@"id: %i, name: %@, age: %i, address: %@", _id, name, age, address);
        }
    } else {
        NSLog(@"select operation is fail.");
    }
    
    sqlite3_finalize(statement);

    8、關閉數據庫

    sqlite3_close(db);

    版權聲明:本文為diaochuanzhi7826原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。
    本文鏈接:https://blog.csdn.net/diaochuanzhi7826/article/details/101967285

    智能推薦

    Android Sqlite

    Android內建了開放源碼的嵌入式數據庫引擎SQLite 1.創建數據庫 openOrCreateDatabase() 創建及打開數據庫,若數據庫不存在,則會先創建再打開 SQLiteDatabase db; //數據庫對象 db = openOrCreateDatabase(db_name, //數據庫名稱        &...

    SQLite(Android)

    文章目錄 介紹 Android 創建數據庫 SQLiteOpenHelper Cursor 相關代碼例子 創建數據庫 數據庫升級 數據庫降級 增加數據 查詢數據 刪除數據 更新數據 adb命令操作sqlite3 常用的sql語句 數據庫事務介紹 題外話:生命的意義是什么? SQLite詳細解說 介紹 SQLite,是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統,它包含在一個相對小的C庫中...

    初識SQLite

    定義 優點 安裝方式 What Why 不需要單獨的服務器進程或操作的系統(無服務器的); 一個完整的SQLite數據庫是存儲在一個單一的跨平臺的磁盤文件; 是非常小,輕量型; 自給自足,不需要任何外部的依賴; 安裝方式 接下來,將 “sqlite” 文件 加入到 Path 路徑下面。Path路徑的方法:我的電腦—屬性—高級系統設置—環境...

    as sqlite

    版本:Android Studio 1.5.1 創建數據庫 升級數據庫 CRUD數據操作 SQLite (英語發音:/??skju??l?la?t/[2] or 英語發音:/?si?kw?l.la?t/[3])是遵守ACID的關系數據庫管理系統,它包含在一個相對小的C程序庫中。與許多其它數據庫管理系統不同,SQLite不是一個客戶端/服務器結構的數據庫引擎,而是被集成在用戶程序中。https://...

    Android -- SQLite

    SQLite語法: Java 的數據類型short/intet/long/float/doiuble/byte[],分別對應SQlite中的數據類型為short/integer/long/float/double/blob. SQLite支持常用的SQL 如下: ●創建表:create table 表名(_id 類型 約束,……) ●查詢數據:select * from...

    猜你喜歡

    sqlite封裝

    為了提高開發效率和代碼閱讀性基于sqlite3 api進行封裝。 功能: 1、sqlite3增加數據(insert) 2、sqlite3修改數據(update) 3、sqlite3查詢數據(select) 4、sqlite3刪除數據(delete) 后續待補充功能: 1.事務提交功能 1.1 事務開啟 1.2 事務回滾 1.3 事務提交 demo下載地址:https://download.csdn...

    HTML中常用操作關于:頁面跳轉,空格

    1.頁面跳轉 2.空格的代替符...

    freemarker + ItextRender 根據模板生成PDF文件

    1. 制作模板 2. 獲取模板,并將所獲取的數據加載生成html文件 2. 生成PDF文件 其中由兩個地方需要注意,都是關于獲取文件路徑的問題,由于項目部署的時候是打包成jar包形式,所以在開發過程中時直接安照傳統的獲取方法沒有一點文件,但是當打包后部署,總是出錯。于是參考網上文章,先將文件讀出來到項目的臨時目錄下,然后再按正常方式加載該臨時文件; 還有一個問題至今沒有解決,就是關于生成PDF文件...

    電腦空間不夠了?教你一個小秒招快速清理 Docker 占用的磁盤空間!

    Docker 很占用空間,每當我們運行容器、拉取鏡像、部署應用、構建自己的鏡像時,我們的磁盤空間會被大量占用。 如果你也被這個問題所困擾,咱們就一起看一下 Docker 是如何使用磁盤空間的,以及如何回收。 docker 占用的空間可以通過下面的命令查看: TYPE 列出了docker 使用磁盤的 4 種類型: Images:所有鏡像占用的空間,包括拉取下來的鏡像,和本地構建的。 Con...

    requests實現全自動PPT模板

    http://www.1ppt.com/moban/ 可以免費的下載PPT模板,當然如果要人工一個個下,還是挺麻煩的,我們可以利用requests輕松下載 訪問這個主頁,我們可以看到下面的樣式 點每一個PPT模板的圖片,我們可以進入到詳細的信息頁面,翻到下面,我們可以看到對應的下載地址 點擊這個下載的按鈕,我們便可以下載對應的PPT壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    精品国产乱码久久久久久蜜桃不卡