• <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庫學習(6)sqlite快速插入

    標簽: sqlite  C語言  源代碼  數據庫  

     

    1、介紹

    SQLite數據庫本質上來講就是一個磁盤上的文件,所以一切的數據庫操作其實都會轉化為對文件的操作,而頻繁的文件操作將會是一個很好時的過程,會極大地影響數據庫存取的速度。例如:向數據庫中插入100萬條數據,在默認的情況下如果僅僅是執行query.exec(“insert into DataBase(……) values(……)”);就會打開和關閉文件100萬次,所以速度當然會很慢。

    SQLite數據庫是支持事務操作的,于是我們就可以通過事務來提高數據庫的讀寫速度。事務的基本原理是:數據庫管理系統首先會把要執行的sql語句存儲到內存當中,只有當commit()的時候才一次性全部執行所有內存中的數據庫。

    2、測試

    • 創建數據庫和表
    const char* createTableSQL =
    
         " CREATE TABLE TESTTABLE(int_col INT,float_col REAL ,string_col TEXT,ADDRESS  char[50])";
    • 準備工作
      int insertCount =10;
    
        const char* insertSQL = "INSERT INTO TESTTABLE(int_col,float_col,string_col,ADDRESS) VALUES(%d, %f, '%s', '%s');";
    
        const char* testString ="this is test.";
    
        const char* testAdd ="Is right?";
    
    char sql[1024];
    • 源碼
     //顯示的開啟一個事物
    
        sqlite3_stmt* stmt2 = NULL;
    
        const char* beginSQL = "BEGIN TRANSACTION";
    
        if (sqlite3_prepare_v2(conn, beginSQL, strlen(beginSQL), &stmt2, NULL) != SQLITE_OK)
    
        {
    
             if (stmt2)
    
                 sqlite3_finalize(stmt2);
    
             sqlite3_close(conn);
    
             return;
    
        }
    
        if (sqlite3_step(stmt2) != SQLITE_DONE)
    
        {
    
             sqlite3_finalize(stmt2);
    
             sqlite3_close(conn);
    
             return;
    
        }
    
        sqlite3_finalize(stmt2);
    
    
    
        //構建基于綁定變量的插入數據
    
        sqlite3_stmt *stmr3 = NULL;
    
        if (sqlite3_prepare_v2(conn, intsertSQL, strlen(intsertSQL), &stmr3, NULL) != SQLITE_OK)
    
        {
    
             if (stmr3)
    
                 sqlite3_finalize(stmr3);
    
             sqlite3_close(conn);
    
             return;
    
        }
    
    
    
    
        //基于已有的SQL語句,迭代綁定不同的變量數據
    
        for (int i = 0; i < insertCount; ++i)
    
        {
    
             sqlite3_bind_int(stmr3, 1, i);
    
             sqlite3_bind_double(stmr3, 2, i*1.0);
    
             sqlite3_bind_text(stmr3, 3, testString, strlen(testString), SQLITE_TRANSIENT);
    
             sqlite3_bind_text(stmr3, 4, testAdd, strlen(testAdd), SQLITE_TRANSIENT);
    
             if (sqlite3_step(stmr3) != SQLITE_DONE)
    
             {
    
                 sqlite3_finalize(stmr3);
    
                 sqlite3_close(conn);
    
                 return;
    
             }
    
             //重新初始化該sqlite3_smrt綁定的變量
    
    
    
             sqlite3_reset(stmr3);
    
             printf("Insert Succeed.\n");
    
        }
    
        sqlite3_finalize(stmr3);
    
    
    
        //提交之前的事物
    
        const char* commitSQL = "COMMIT";
    
        sqlite3_stmt * stmt4 = NULL;
    
        if (sqlite3_prepare_v2(conn, commitSQL, strlen(commitSQL), &stmt4, NULL) != SQLITE_OK)
    
        {
    
             if (stmt4)
    
                 sqlite3_finalize(stmt4);
    
             sqlite3_close(conn);
    
    
    
             return;
    
        }
    
        if (sqlite3_step(stmt4) != SQLITE_DONE)
    
        {
    
             sqlite3_finalize(stmt4);
    
             sqlite3_close(conn);
    
             return;
    
        }
    
        sqlite3_finalize(stmt4);

     

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

    智能推薦

    SQLite

    SQLite可視化工具sqlitebrowser,下載地址 http://sqlitebrowser.org/ Ubuntu/deepin安裝方式 打開數據庫文件 How to install sqlite3 查看版本 創建一個名為test.db 的數據庫 進入sqlite后 創建一個表 向mytable插入數據 查詢數據表 設置為列顯示模式 退出數據庫 重新進入test.db數據庫 查看數據庫信...

    SQLite

    相關參考鏈接為:http://blog.csdn.net/qq_28234213/article/details/72784331 http://www.cnblogs.com/Luoma_HaoWei/archive/2013/08/23/3278154.html 一、Ctrl+Z之后,在按回車,可以退出命令行界面。 二、 sqlite進入 ...> 狀態退出的方法: 此時是進入...

    SQLite

    前言 采用 SQLite 數據庫來存儲數據。SQLite 作為一中小型數據庫,應用 iOS 中,跟前三種保存方式相比,相對比較復雜一些。 注意:寫入數據庫,字符串可以采用 char 方式,而從數據庫中取出 char 類型,當 char 類型有表示中文字符時,會出現亂碼。 這是因為數據庫默認使用 ASCII 編碼方式。所以要想正確從數據庫中取出中文,需要用 NSString 來接收從數據庫取出的字符...

    sqlite學習(1)編譯sqlite

      Sqlite數據庫簡介 SQLite是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統。 它很小,只有sqlite3.h、sqlite3ext.h、sqlite3.c三個C語言文件。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,我...

    猜你喜歡

    android學習筆記----SQLite數據庫

        目錄 用SQLite語句執行: 利用SQLiteDatabase中自帶的增刪改查操作: SQLite數據庫的事務介紹: 目錄一二的增刪改查源碼地址:https://github.com/liuchenyang0515/CreateDB3 目錄三事務介紹的源碼地址:https://github.com/liuchenyang0515/BankTransfer  ...

    SQLite初識(四)數據庫插入數據

    表創建好了,需要插入數據了, 我們下邊演示3中方法插入數據 給主界面上添加一個按鈕,點擊按鈕執行插入信息操作 方法一 方法二 方法三...

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

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

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

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

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

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

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