• <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學習之sqlite的創建數據庫,表,插入查看數據

    iOS sqlite數據庫操作。步驟是:

    先加入sqlite開發庫libsqlite3.dylib,

    新建或打開數據庫,

    創建數據表,

    插入數據,

    查詢數據并打印

    1、新建項目sqliteDemo,添加使用sqlite的庫libsqlite3.dylib


    2、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類型的數據


    3、獲取沙盒目錄,并創建或打開數據庫。

    viewController.h頭文件添加一個成員變量,并包含頭文件sqlite3.h

    #import <UIKit/UIKit.h>
    #import <sqlite3.h>
    
    
    @interface ViewController : UIViewController
    {
        sqlite3 *db;
    }
    @end

    在.m文件 定義宏,方面后面使用

    #define DBNAME    @"personinfo.sqlite"
    #define NAME      @"name"
    #define AGE       @"age"
    #define ADDRESS   @"address"
    #define TABLENAME @"PERSONINFO"

       NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
        NSString *documents = [paths objectAtIndex:0];
        NSString *database_path = [documents stringByAppendingPathComponent:DBNAME];
        
        if (sqlite3_open([database_path UTF8String], &db) != SQLITE_OK) {
            sqlite3_close(db);
            NSLog(@"數據庫打開失敗");
        }

    sqlite3_open,如果數據不存在,則創建。運行。這是在沙盒目錄下能看到數據庫文件(如何打開模擬器沙盒目錄請參考:iOS學習之iOS沙盒(sandbox)機制和文件操作(一)



    4、創建數據表

    創建一個獨立的執行sql語句的方法,傳入sql語句,就執行sql語句

    -(void)execSql:(NSString *)sql
    {
        char *err;
        if (sqlite3_exec(db, [sql UTF8String], NULL, NULL, &err) != SQLITE_OK) {
            sqlite3_close(db);
            NSLog(@"數據庫操作數據失敗!");
        }
    }
    創建數據表PERSONINFO的語句

    NSString *sqlCreateTable = @"CREATE TABLE IF NOT EXISTS PERSONINFO (ID INTEGER PRIMARY KEY AUTOINCREMENT, name TEXT, age INTEGER, address TEXT)";
        [self execSql:sqlCreateTable];
    
    運行程序,數據表創建了。怎么知道數據表創建了呢?我們用火狐的Sqlite Manager插件工具打開數據庫文件看看。可以在火狐瀏覽器里安裝這個插件。打開


    四個字段都出現是表中了。

    5、插入數據:

    NSString *sql1 = [NSString stringWithFormat:
    					 @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
    					 TABLENAME, NAME, AGE, ADDRESS, @"張三", @"23", @"西城區"];
        
        NSString *sql2 = [NSString stringWithFormat:
                          @"INSERT INTO '%@' ('%@', '%@', '%@') VALUES ('%@', '%@', '%@')",
                          TABLENAME, NAME, AGE, ADDRESS, @"老六", @"20", @"東城區"];
        [self execSql:sql1];
        [self execSql:sql2];
    運行程序,插入兩條數據,用火狐的sqlite工具查看


    6、查詢數據庫并打印數據

     NSString *sqlQuery = @"SELECT * FROM PERSONINFO";
        sqlite3_stmt * statement;
        
        if (sqlite3_prepare_v2(db, [sqlQuery UTF8String], -1, &statement, nil) == SQLITE_OK) {
            while (sqlite3_step(statement) == SQLITE_ROW) {
                char *name = (char*)sqlite3_column_text(statement, 1);
                NSString *nsNameStr = [[NSString alloc]initWithUTF8String:name];
                
                int age = sqlite3_column_int(statement, 2);
                
                char *address = (char*)sqlite3_column_text(statement, 3);
                NSString *nsAddressStr = [[NSString alloc]initWithUTF8String:address];
                
                NSLog(@"name:%@  age:%d  address:%@",nsNameStr,age, nsAddressStr);
            }
        }
        sqlite3_close(db);
    打印結果:

    2012-06-29 13:25:32.205 sqlitDemo[3587:f803] name:張三  age:23  address:西城區
    2012-06-29 13:25:32.206 sqlitDemo[3587:f803] name:老六  age:20  address:東城區
    

    最后關閉數據庫。

    例子代碼:http://download.csdn.net/detail/totogo2010/4400911

    著作權聲明:本文由http://blog.csdn.net/totogo2010/原創,歡迎轉載分享。請尊重作者勞動,轉載時保留該聲明和作者博客鏈接,謝謝!



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

    智能推薦

    【Android】18.0 SQLite數據庫——LitePal的使用及SQLite數據庫怎么查看

    1.0 隨著android編程的版本和工具的不斷更新,一些學習內容出現失效、棄用現象。寫這個同時也是給自己做筆記。 2.0 Android系統內置數據庫,SQLite輕量級的關系型數據庫,當然,使用起來其實很麻煩,還需要熟練使用SQL語句。 3.0 開源讓Android開發者收益良多,導致GitHub上有成百上千的優秀Android開源項目,當我們使用開源庫LitePal時,將會特別感受到SQLi...

    關于PyCharm 中使用sqlite創建數據庫表,表不顯示的問題。

    1.問題: 在pycharm中將爬取的數據通過sqlite3保存在數據庫表中,數據庫名稱為:film.sqlite3,創建表名為:filmtop250。過程為 此時,Database只顯示數據庫film,但并沒有創建的表。 2.解決方案:...

    第一行代碼中SQLite數據庫和表創建成功但是查看表為空

    按照書上的代碼仔細核對后,發現代碼應該是沒有問題的,只是無法查看表,在網上看見有人說使用版本低一點的模擬器就能解決這個問題,我試了一下,確實可以,這個是API 22的模擬器生成的databases文件夾下的文件截圖 生成的這種類型的文件,直接導出.db文件就可以在可視化工具中查看,并且這種情況和書上的也是一樣的。 然后再放一張一開始我使用的模擬器(API28)生成的databases文件夾下的文件...

    android開發 查看手機中的db文件,查看sqlite數據庫的表結構

    1 2 注意:確保你的手機是root過的。 一、打開adb.exe 1 2 二、打開DDMS(Android Device Monitor) 1 2 1 2 三、獲取權限 在獲取權限的時候,需要一步一步的獲取文件夾權限。 1、獲取data文件夾權限 1 2 3 2、獲取dada/dada文件夾權限 1 2 3 3、獲取應用db文件 1 2 3 4 4、導出db文件 1 2 四、查看數據庫結構 權限...

    猜你喜歡

    android如何查看手機中的db文件,查看sqlite數據庫的表結構

    android如何查看手機中的db文件,查看sqlite數據庫的表結構 原創 2016年08月30日 14:14:20 標簽: 數據庫 / sqlite / android / 手機 17401 1 2 注意:確保你的手機是root過的。 一、打開adb.exe 1 2 二、打開DDMS(Android Device Monitor) 1 2 1 2 三、獲...

    IOS學習筆記15——SQLite數據庫

    SQLite是MySQL的簡化版,更多的運用與移動設備或小型設備上。SQLite的優點是具有可移植性,它不需要服務器就能運行,同時,它也存在一些缺陷,首先,沒有提供簡單的數據庫創建方式,必須手工創建數據庫,其次,SQLite沒有面向對象接口,必須使用依賴于C語言代碼的API。相對于OC,這套API既不那么優雅,也更難使用。當相比于用文件進行存儲,還是更推薦使用SQLite進行數據存儲。 下面來看下...

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

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

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

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

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

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

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