• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • iOS - OC SQLite 數據庫存儲

    http://www.cnblogs.com/QianChia/p/5782861.html

    • 采用 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、環境配置

    • 添加動態庫

      • 在 TARGETS => Build Phases => Link Binary With Libraries => +(添加) => Add Other... => command + shit + g => 輸入 /usr/lib 找到一下文件并添加:libsqlite3.0.dylib

        SQLite1

        SQLite2

      • 或者在 TARGETS -> Build Settings -> Linking -> Other Linker Flags 中添加 -l< 所需 dylib 的名稱 >:-lsqlite3.0

        SQLite3

      • 添加頭文件:

            #import "sqlite3.h"
    • 配置數據庫路徑

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

    2、打開數據庫

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

    3、創建數據表

        /*
            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);

     

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

    智能推薦

    SQlite數據庫存儲及增刪改查例子

    MainActivity: MyDatabaseHelper.class 運行截圖 例如查詢:...

    Android中的SQLite數據庫存儲

      SQLlite是一款輕量級的關系型數據庫, 作為Android系統內置的數據庫, 它的運算數度非常快,占用資源少,通常只需幾百KB的內存就足夠,SQLite不像其他關系型數據庫擁有眾多繁雜的數據類型,它的數據類型很簡單,integer 表示整型, real表示浮點型, text表示文本類型, bolb表示二進制型。  此處出示一個SQLite數據庫存儲的案例: SQLite...

    SQLite數據庫存儲(一)【安卓學習筆記】

    對于MODE_PRIVATE,MODE_APPEND兩種模式,對寫文件的影響有什么不同? MODE_PRIVATE:該文件只能被當前程序讀寫,會把原來的內容覆蓋掉 MODE_APPEND:該文件的內容可追加,不會把原來的內容覆蓋掉,新寫的內容追加在文件后面 但是對于修改文件中的部分內容,應該怎么做呢?這就需要我們用到SQLite數據庫 主要內容: 創建和打開一個SQLite 數據庫 SQLite數...

    17讀書筆記之SQLite數據庫存儲

    SQLite數據庫存儲 創建數據庫 Android管理數據庫提供了一個SQLiteOpenHelper幫助類。 借助這個類就可以簡單地對數據庫進行創建和升級。下面學習SQLiteOpenHelper的基本用法。 首先SQLiteOpenHelper是一個抽象類,我們要是用的話,需要創建一個自己的幫助類去繼承它。SQLiteOpenHelper中有兩個抽象方法。 onCreate()和onUpgra...

    使用Android studio實現SQLite數據庫存儲

    使用Android studio實現SQLite數據庫存儲 題目 代碼 XML代碼(1) XML代碼(2) JAVA代碼(1) JAVA代碼(2) JAVA代碼(3) 運行結果 題目 1.要求按圖1完成設計,此界面為啟動界面。其中Spinner中的數據為:語文,數學,英語,歷史,生物。Spinner使用適配器綁定數據。 2.當點擊“添加成績”按鈕時,先判斷SQLite中是否...

    猜你喜歡

    iOS——SQLite數據庫操作

    iOS——SQLite數據庫操作 首先介紹一下SQLite數據庫以及為什么要用ta: SQLite是一款輕型的嵌入式數據庫,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它的處理速度比Mysql、PostgreSQL這兩款著名的數據庫都還快。 數據庫的存儲結構和excel很像,以表(table)為單位 新建數據庫文件 新建一張表(table) 添加多個字...

    FMDB基礎(oc操作sqlite)

    FMDB 是對 SQLite API 輕量級二次封裝。所以整體使用思路還是類似 SQLite API 的思路。由于 FMDB 是基于 SQLite API 的,所以使用 FMDB 也需要導入 SQLite 的動態庫文件。 FMDB 中除了“查詢”以外,任何操作都歸屬于“更新”行為。 接下來我們使用FMDB,首先需要導入sqlite動態庫文件 首先在v...

    【鼠】安卓學習雜記(十三)——Android數據存儲之SQLite數據庫存儲

    一、適用場景 適用于存儲一些復雜的關系型數據。 二、概述 輕量級嵌入式數據庫引擎,它支持SQL 語言,并且只利用很少的內存就有很好的性能。可存儲大量的數據。 Android SQLite對我目前的安卓學習水平而言,還是比較復雜的,在此處暫不做詳細闡述,僅以此時使用狀態闡述。 三、使用步驟 第一步:創建MyDatabaseHelper繼承SQLiteOpenHelper 第二步:在MainActiv...

    IOS-數據存儲之SQLITE簡單的使用

    數據存儲之SQLITE簡單的使用 ios中sqlite是一種輕量級的存儲數據庫,它的使用和mysql或者sqlserver等關系型數據庫的使用方式相似。下面介紹sqlite使用結構流程。 先看下總體的效果圖 第一個主界面 主要用來顯示數據庫中的數據使用tableview來展示 - 為第二個界面 用來向數據庫中添加數據,數據名稱為學生學號和學生姓名 - 第三個 為顯示數據的主界面 —&m...

    iOS OC對象詳解

    OC的實現 OC的對象、類主要是基于C、C++的結構體來實現的。 編寫的 OC代碼,底層實現其實都是C、C++代碼。 OC對象的本質 一個NSObject對象占用多少內存? NSObject對象內部只有一個isa指針,在64bit的環境下,指針占用8個字節,所以NSObject對象實際只使用了8個字節,但是在ios的64bit操作系統中,分配內存規則是16的倍數,所以一個NSObject對象占用1...

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