• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • sqlite3入門

    轉載地址:https://www.cnblogs.com/IamLoser/p/6648396.html    https://baike.baidu.com/item/SQLite/375020


    sqllite簡介:

    SQLite,是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域項目。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界著名數據庫管理系統來講,它的處理速度比他們都快。

    常用語法:

        (1)創建數據庫:sqlite3 xxx.db

        (2)創建表

        (3)刪除表

        (4)INSERT INTO語法

        (5)SELECT語法

        (6)WHERE語法

        (7)UPDATE語法

        (8)DELETE語法

     


    linux C中編譯方式:gcc opendbsqlite.c -o db.out -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include


    主要函數:

        (1)最重要的三個函數:

          int sqlite3_open(const char*, sqlite3**);

          int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void*, char**); 

          int sqlite3_close(sqlite3*);

          還有2個:

              const char *sqlite3_errmsg(sqlite3*);

              void sqlite3_free(void*);

          查看更多函數,下載sqlite源碼包,只需要其中的sqlite3.c、sqlite.h即可。

    
    

        (2)sqlite3_open 返回一個整數錯誤代碼,=0 表示成功碼,> 0都是錯誤碼,詳情看Sqlite3手冊說明

          函數用于打開/創建一個函數庫

          const char* 指定文件名,sqlite3** 指定數據庫句柄,用戶通過數據庫句柄操作數據庫

          

     

        (2)sqlite3_exec返回0表示sql指令執行完畢,否則說明這次執行沒有成功

          函數用于執行一條或多條SQL語句,SQL語句之間用“;”隔開

          sqlite3*指定已打開的數據庫句柄,const char *sql   指定SQL指令,sqlite_callback  在回調函數中可以獲得SQL執行的結果

          void*  指定傳給回調函數的數據 , char**   指定命令執行失敗的詳細錯誤信息

        (3)回調函數

          

        (4) sqlite3_close   關閉數據庫文件,參數是數據庫句柄

        (5)sqlite3_errmsg  返回錯誤碼所對應的文字說明,參數是數據庫句柄

        (6)sqlite3_free  釋放存放錯誤信息的內存空間,sqlite3_errmsg  返回的errmsg必須用此函數釋放

        (7)簡單測試代碼

    demo程序
    #include <stdio.h>
    #include <sqlite3.h>
    
    int callback(void *pv,int argc,char **argv,char **col)
    {
        int cnt_i = 0;
        for(cnt_i =0;cnt_i < argc;cnt_i++)
        {
            printf("%s\t%s\n",col[cnt_i],argv[cnt_i]);
        }
        printf("\n");
        return 0;
    }
    
    int main(void)
    {
        sqlite3 *db;
        int result = 0;
        char *rerrmsg = NULL;
        char *sql = NULL;
        char *data = "callback";
    
        result = sqlite3_open("sample.db",&db);
        if(result > 0)
        {
            printf("open database err:%s\n",sqlite3_errmsg(db));
            return -1;
        }
    
        else
        {
            printf("open database successfully!\n");
    
            sql = "CREATE TABLE STUDENT("    \
                  "NUM INT PRIMARY KEY NOT NULL,"    \
                  "NAME TEXT NOT NULL,"        \
                  "AGE INT NOT NULL,"        \
                  "SORCE REAL);";
    
            result = sqlite3_exec(db,sql,callback,NULL,&rerrmsg);
            if(result != 0)
            {
                printf("creat table err:%s\n",rerrmsg);
                sqlite3_free(rerrmsg);
                return -2;
            }
    
            else
            {
                printf("create table successfully!\n");
    
                sql = "INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)"        \
                      "VALUES(1,'Paul',13,99.1);"                    \
                      "INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)"        \
                      "VALUES(2,'Kate',15,94.1);"                    \
                      "INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)"        \
                      "VALUES(3,'Jim',12,95.1);"                    \
                      "INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)"        \
                      "VALUES(4,'Tom',13,99.4);"                    \
                      "INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)"        \
                      "VALUES(5,'Jack',13,89.1);";
    
                result = sqlite3_exec(db,sql,callback,NULL,&rerrmsg);
                if(result != 0)
                {
                    printf("insert data err:%s\n",rerrmsg);
                    sqlite3_free(rerrmsg);
                    return -3;
                }
    
                else
                {
                    printf("insert data successfully!\n");
    
                    sql = "SELECT * FROM STUDENT";
                    result = sqlite3_exec(db,sql,callback,(void *)data,&rerrmsg);
                    if(result != 0)
                    {
                        printf("select data err:%s\n",rerrmsg);
                        sqlite3_free(rerrmsg);
                        return -4;
                    }
    
                    else
                    {
                        printf("select data successfully!\n");
                    }
                }
            }
        }
    
        sqlite3_close(db);
    
        return 0;
    }
    

    完!!

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

    智能推薦

    裸機移植sqlite3

    上一篇文章中提供了vfs支持,此處主要是sqlite3移植所需的線程,信號量支持,sqlite3源碼在官方下載,需要很大的內存支持,移植基本原理就是實現sqlite3所需的linux api接口即可,可以通過宏定義去掉一些不用的功能,減少API依賴。 ucos_iii_pthread.c //ucos_iii_pthread.h 請先初始化ucos以及文件系統,然后就可以初始化sqlite3,并查...

    Sqlite3交叉編譯

    一、準備工作 本次使用ubuntu18.04和 "arm-fsl-linux-gnueabi-"交叉編譯器 1、下載Sqlite3 在https://www.sqlite.org/download.html里下載Sqlite3 2、將交叉編譯工具鏈安裝 1、查看交叉編譯器是否在環境變量中 加入環境變量的方法: 1、sudo vi /etc/bash.bashrc 2、輸入exp...

    VS2015配置Sqlite3

    轉載自VS2015中配置SQLite3 VS2015中配置SQLite3 官方下載地址:http://www.sqlite.org/download.html 一、下載 SQLite3.def和SQlite3.dll 文件,并解壓到如 D:\SQLite3\ 目錄下。 二、運行 CMD, 輸入: "D:\Program Files (x86)\Microsoft Visual Studi...

    Python SQLite3 迭代器

    需求: 遍歷一個指定文件夾,將指定文件夾下的文件名稱寫入到數據庫對應的列中,如果數據庫行中的數據與文件的名字相同,則將對應的文件名寫入匹配行的相對應的列中 數據庫如下圖: 注意:通過cursor.execute()所獲得的對象是一個可迭代對象*,如果把這個可迭代對象用在for的嵌套循環中的話,會出錯,達不到預期結果*(此處我踩了10多分鐘坑,最后調試才發現問題),必須先創建一個集合,對cursor...

    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_...

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