• <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編程

    前言

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

                                                                                                                                                                                                                                        --------摘自百度百科

    本篇文章主要講述如何在終端和C程序里中使用sqlite3


    一:在終端上使用sqlite3


    1:首先檢測當前環境下有沒有安裝

    在終端上輸入    sqlite3

    結果:


    第一行是你的版本信息;光標在等待你輸入命令

    終端上的一些基礎命令

    1: .help     打開幫助菜單  可以查看sqlite3的所有命令和用法

    2: .exit      退出sqlite3

    3 : .table  顯示當前所有表

    4:  .schema  <table_name> 查看表的結構   //不加括號

    5:  .database 顯示當前打開的數據庫文件

    系統命令一般以點開頭;功能命令以分號結尾;

    2:建立一張表

       create table student(         //student為表名
        ID         INTEGER,           //相當與字符型
        name    TEXT,                 //整形
        sex        TEXT,
        age        INTEGER,
        primary key(ID)             //ID值不可重復
        );


    3:給表添加成員

        insert into student values(1, 'Zhang', 'M', 18);


    第二個語句提示ID為1的重復了;

    4:查看成員

    select ID, Name from student where NOT(Sex = 'f');    //查看成員中SEX的值不為f的成員ID和名字


    當要查看成員所有參數的時候ID,Name可以用*號代替

    select * from student where NOT(Sex = 'f');  

    where是個比較表達式,以下列舉一些通用的表達式


    NOT是邏輯操作符除了,NOT 以外還可以使用AND 、OR;

    5:刪除成員

    delete from student where ID = 2;

    刪除student表里id為2的成員

    6:刪除表

    drop tablestudent;

    刪除名字為student的表

    二:在C程序上使用SQLITE3

    1:先包含數據庫頭文件 sqlite3.h

    2:定義一個數據庫文件指針

         sqlite3 *database

    2:打開表函數 

         int sqlite3_open( 文件名,sqlite3 ** );

        第一個參數為數據庫名稱,第二個是文件指針

        如果數據庫不存在,則新建一個

    3:關閉數據庫

          intsqlite3_close(sqlite3 *);

         第一個參數為文件指針

    4:使用數據庫的函數

          int sqlite3_exec(sqlite3*, constchar *sql,sqlite3_callback, void *,  char**errmsg );

          第一個參數為文件指針;第二個參數為sql語句

          第三個參數為回調函數;第四個參數為為回調

          第5個參數char** errmsg是錯誤信息

    5:例子

    #include <stdio.h>
    #include <sqlite3.h>   // 數據庫的頭文件
    
    // 每查到一條記錄,該函數被調用一次
    int msg(void* v, int num, char** value, char** name)
    {
            int i;
            for (i = 0; i < num; i++)
            {
                    printf ("%s : %-8s", name[i], value[i]);
            }
    
            printf ("\n");
    
            return 0;  // 函數內部一定要返回一個0
    }
    
    int main()
    {
            sqlite3 * database;
    
            // 打開數據庫
            int ret = sqlite3_open("student.db", &database);
            if (ret != SQLITE_OK)
            {
                    printf ("打開數據庫失敗\n");
                    return -1;
            }
    
            printf ("打開數據庫成功\n");
    
            char *errmsg = NULL;
            char *sql = "create table if not exists student(ID INTEGER,name TEXT,sex TEXT,age INTEGER,primary  key(ID))";
            ret = sqlite3_exec(database, sql, NULL, NULL, &errmsg);
            if (ret != SQLITE_OK)
            {
                    printf ("數據庫操作失敗:%s\n", errmsg);
                    return -1;
            }
    
            int id;
            char name[20];
            char sex[2];
            int age;
            printf ("請輸入ID:\n");
            scanf ("%d", &id);
    
            printf ("請輸入用戶名:\n");
            scanf ("%s", name);
    
            printf ("請輸入性別:\n");
            scanf ("%s", sex);
    
            printf ("請輸入年齡:\n");
            scanf ("%d", &age);
    
            // insert into student values(id, name, sex, age);
            char buf[100];
            sprintf (buf, "insert into student values(%d, '%s', '%s', %d)", id, name, sex, age);
            ret = sqlite3_exec(database, buf, NULL, NULL, &errmsg);
            if (ret != SQLITE_OK)
            {
                    printf ("數據庫操作失敗:%s\n", errmsg);
                    return -1;
            }
            char *sql1 = "select * from student";
            ret = sqlite3_exec(database, sql1, msg, NULL, &errmsg);
            if (ret != SQLITE_OK)
            {
                    printf ("數據庫操作失敗:%s\n", errmsg);
                    return -1;
            }
            // 關閉數據庫
            sqlite3_close(database);
            return 0;
    }
    
    TIP:如果用GCC編譯的話,要加-lsqlite3
















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

    智能推薦

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

    Revise : Linux sqlite3 輕量級數據庫簡單接口編程(c++)

    一、相關API //數據庫基本操作之:打開關閉與錯誤處理 sqlite3_open() 函數返回一個整數錯誤代碼,而不是像第二版中一樣返回一個指向sqlite3結構體的指針. sqlite3_open() 和 sqlite3_open16() 的不同之處在于:sqlite3_open16() 使用UTF-16編碼(使用本地主機字節順序)傳遞數據庫文件名. 如果要創建新數據庫, sqlite3_op...

    linux下C語言編程操作數據庫sqlite3

    文章目錄 1、安裝數據庫 2、sqlite的相關函數 2.1 sqlite3_open() 2.2 sqlite_close() 2.3 sqlite3_exec() 2.4 sqlite3_get_table() 3、代碼示例 3.1 創建一個數據庫 3.2插入數據 3.3查看表的內容 3.4刪除數據 1、安裝數據庫 我們從SQLi官網下載頁面,https://www.sqlite.org/do...

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

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

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