• <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 數據庫:

    1.1 SQL 語法: http://www.w3school.com.cn/sql/

    1. SQL 語句對大小寫不敏感。
      表名稱 mytable , 列: id name iage
      1.1.1
      SELECT - 從數據庫表中獲取數據
      SELECT 列名稱 FROM 表名稱
      SELECT * FROM 表名稱
             Select id from mytable ; // 從表中顯示id 信息
                                      Select id,name  from mytable ;  // 返回 id name 信息
                                      Select id,name,value from mytbale; // 返回 id name  value

    的信息 SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值 下面的運算符可在
    WHERE 子句中使用:
    這里寫圖片描述

    ![這里寫圖片描述](https://img-blog.csdn.net/20180801084746692?watermark/2/text/aHR0cHM6Ly9ibG9nLmNzZG4ubmV0L3RpZ2VyMTU2MDUzNTM2MDM=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70)
    1.1.2
                                          UPDATE - 更新數據庫表中的數據
    
                                                    UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
                                                    UPDATE  mytable  SET name= 'Fred'  WHERE id=”1” ;
                                                    UPDATE  mytable  SET name= 'Zhongshan', age= “11”  WHERE  id= “4” ;
                             1.1.3       DELETE - 從數據庫表中刪除數據
    
                                                    DELETE FROM 表名稱 WHERE 列名稱 = 值
                                                    DELETE  FROM  mytable  WHERE   id=”1”;
                             1.1.4        INSERT INTO - 向數據庫表中插入數據
    
                                                    INSERT INTO 表名稱 VALUES (值1, 值2,....)
                                                    INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
                                                    INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
    

    1.2 linux下 sqlite 的命令:

         sqlite3   test.db ,創建一個名為test.db 的數據庫 ;
         Create  table  mytable(id,name,age);  創建了一個名字叫mytabel的數據表,該數據表內定義了三個字段,分別為 id、name、age。 
             .mode column (注意沒有分號),設置為列顯示模式
             .databases 查看數據庫信息
             sqlitebrowser test.db  圖形化顯示數據庫. 
    

    1.3 嵌入式C 對 sqlite的操作:
    常用函數

    sqlite3_open(const char *filename, sqlite3 **ppDb);  
    sqlite3_close(sqlite3 *db);  
    sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**),  void *, char **errmsg);  

    這三個函數基本上能完成對sqlite3的所有操作。需要用的頭文件為”sqlite3.h”。
    打開(新建)數據庫

    sqlite3 *db;
    sqlite3_open(“test.db”, &db);
    關閉數據庫

    
    sqlite3_close(db);  
    執行sql語句(以創建表為例)
    char sql[128];  
    memset(sql, '\0', 128);  
    sprintf(sql, "%s%s%s", "create table ""test_tb", "(id INTEGER PRIMARY KEY, data TEXT)");  
    sqlite3_exec(db, sql, NULL, NULL, NULL);  
    sqlite3_exec中第一個參數:數據庫名。

    第二個參數 sql 操作語句。
    第三個參數是一個回調(callback)函數。
    第四個參數可用于給回調函數傳入一個參數。
    sqlite3_exec函數的返回指,它返回一個整型的數,

    編譯:arm-linux-gnueabihf-gcc -o test sqlite.c -lsqlite3

    示例:

    #include <stdio.h>   
    #include <string.h>   
    #include <sqlite3.h>    
    /* callback函數中: 
     * arg: 是從主函數傳進來的參數 
     * values: 是查詢結果的值 
     * names: 查詢結果列的名字 
     */  
    int wf_callback(void *arg, int nr, char **values, char **names)  
    {  
        printf("wf_callback is called \n");
        int i;  
        char str[128];  
        for (i=0; i<nr; i++) { 
          printf("id =%s,  %s \n",names[i] ,values[i] );  
        }  
    
        return 0;  
    }  
    
    int main()  
    {  
        char sql[128];  
        sqlite3 *db;  
    
        sqlite3_open("test.db", &db);  //打開(或新建)一個數據庫   
        memset(sql, '\0', 128);  
        /* 新建一張表 */  
        strcpy(sql, "create table mytable (id,name,age)");  
        sqlite3_exec(db, sql, NULL, NULL, NULL);  
    
        memset(sql, '\0', 128);  
        strcpy(sql, "insert into mytable values ('1','luan','20')"); 
        sqlite3_exec(db, sql, NULL, NULL, NULL);
        memset(sql, '\0', 128);  
        strcpy(sql, "insert into mytable values ('2','sun','21')"); 
        sqlite3_exec(db, sql, NULL, NULL, NULL);
        memset(sql, '\0', 128);  
        strcpy(sql, "insert into mytable values ('3','wang','22')");
        sqlite3_exec(db, sql, NULL, NULL, NULL);
    
        memset(sql, '\0', 128);  
        strcpy(sql, "select * from mytable");  
        sqlite3_exec(db, sql, wf_callback, NULL, NULL);  
        sqlite3_close(db); //關閉數據庫   
        return 0;  
    }           

    1.4 嵌入式編譯、配置:
    ./configure –host=arm-linux-gnueabihf –prefix=$PWD/temp_install
    Sudo make
    Sudo make install

    將編譯好的頭文件、動態庫復制到工具鏈中
    sudo cp sqlite3ext.h sqlite3.h /usr/arm-linux-gnueabihf/include/
    sudo cp libsqlite3.so libsqlite3.so.0.8.6 libsqlite3.so /usr/arm-linux-gnueabihf/lib/
    將編譯好的動態庫 復制到文件系統中:
    sudo cp libsqlite3.so.0 libsqlite3.so.0.8.6 libsqlite3.so /home/book/work/rootfs_min/lib -rf

    回調函數的格式如下:

    int sqlite_callback(
        void* pv,    /* 由 sqlite3_exec() 的第四個參數傳遞而來 */
        int argc,        /* 表的列數 */
        char** argv,    /* 指向查詢結果的指針數組, 可以由 sqlite3_column_text() 得到 */
        char** col        /* 指向表頭名的指針數組, 可以由 sqlite3_column_name() 得到 */
    );

    參數格式:
    傳給sqlite3_exec的回調函數,用來顯示查詢結果
    對每一條查詢結果調用一次該回調函數
    參數:
    pv:由sqlite3_exec傳遞的初始化參數
    argc:表頭的列數
    col:表頭的名字數組指針
    argv:表頭的數據數組指針
    返回值:
    1:中斷查找
    0:繼續列舉查詢到的數據示例表:
    +———————————–+

    id pic data(16進制數據)
    1 a.jpg 00 00 00 …
    2 b.jpg XX XX XX

    +———————————–+
    對第一行數據:
    argc=3 即 [0]…[2]
    argv[0]=”1”,argv[1]=”a.jpg”,argv[2]=”00 00 00…”(實際16進制數據,非這里顯示的字符串形式)
    col[0]=”id”,col[1]=”pic”,col[2]=”data” 說明:
    sqlite3_exec() 的回調函數必須按照此格式, 當然形參的名字任意.
    如果某列的數據類型不是char*, 則可以對結果執行相關的轉換, 如:用atoi()把結果轉換為整數(integer), 如果是二進制數據, 則可以直接強制類型轉換, 如:(void*)argv[i].
    該回調函數有兩種返回值類型.
    1.返回零:sqlite3_exec() 將繼續執行查詢.
    2.返回非零:sqlite3_exec()將立即中斷查詢, 且 sqlite3_exec() 將返回 SQLITE_ABORT.
    示例:

     for (i=0; i<nr; i++) { 
          printf(" %s,  %s  ;",names[i] ,values[i] );  
        } 
        printf("\n");
    
         執行 select * from mytable
               id   name    age
      *        1    luan    20
               2    sun    21
               3    wang   22
      回調函數將被執行3 次
      其中nr 為  表的列數 , names 的值為 mytable 的列屬性, val為列屬性對應的值
    wf_callback is called 
    

    id, 1 ; name, luan ; age, 20 ;
    wf_callback is called
    id, 2 ; name, sun ; age, 21 ;
    wf_callback is called
    id, 3 ; name, wang ; age, 22 ;
    */

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

    智能推薦

    數據庫SQLite<一>

    一、SQLite數據庫簡介 SQLite第一個Alpha版本誕生于2000年5月,它是一款輕量級數據庫,它的設計目標是嵌入式的,占用資源非常的低,只需要幾百K的內存就夠了。SQLite已經被多種軟件和產品使用,Mozilla FireFox就是使用SQLite來存儲配置數據的,Android和iPhone都是使用SQLite來存儲數據的。 二、Android中如何使用SQLite 1. 使用SQL...

    《Python》《SQLite》Python連接SQLite數據庫,讀表

        配置Python環境的方法在我的博客中已經詳細介紹。 一、SQLite和PySQLite     在最近的Python版本中(從2.5開始),SQLite的優勢在于它的一個包裝(PySQLite)已經被包括在標準庫內。SQLite在Python中的模塊名稱為“sqlite3”,我們可以在...

    《SQLite》最輕巧的數據庫SQLite——初探

    文章目錄 一、SQLite概念及優點 二、SQLite圖形化管理工具——SQLite Expert Professional 三、SQLite基礎語言 1、創建數據庫 2、刪除數據庫 3、創建表 4、刪除表 5、表操作語句 一、SQLite概念及優點 概念: SQLite是一款嵌入式數據庫,和Oracle、Mysql、DB2等數據庫不同,比如Oracle它是與程序分離的,而...

    Android數據庫 之 SQLite數據庫

    2019獨角獸企業重金招聘Python工程師標準>>> 每個應用程序都要使用數據,Android應用程序也不例外,Android使用開源的、與操作系統無關的SQL數據庫—SQLite。 SQLite第一個Alpha版本誕生于2000年5月,它是一款輕量級數據庫,它的設計目標是嵌入式的,占用資源非常的低,只需要幾百K的內存就夠了。 SQLite已經被多種軟件和產品使用,...

    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壓縮包 那我們就開始做吧 首先,查看網頁的源代碼,我們可以看到每一...

    Linux C系統編程-線程互斥鎖(四)

    互斥鎖 互斥鎖也是屬于線程之間處理同步互斥方式,有上鎖/解鎖兩種狀態。 互斥鎖函數接口 1)初始化互斥鎖 pthread_mutex_init() man 3 pthread_mutex_init (找不到的情況下首先 sudo apt-get install glibc-doc sudo apt-get install manpages-posix-dev) 動態初始化 int pthread_...

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