• <noscript id="e0iig"><kbd id="e0iig"></kbd></noscript>
  • <td id="e0iig"></td>
  • <option id="e0iig"></option>
  • <noscript id="e0iig"><source id="e0iig"></source></noscript>
  • 使用C語言操作sqlite3

    標簽: sqlite3  sqlite

    1.對數據庫打開操作:

    SQLITE_API int sqlite3_open(

    const char *filename, /* Database filename (UTF-8) */

    sqlite3 **ppDb /* OUT: SQLite db handle */

    );

    參數 

    你要打開的文件名,文件名是一個字符串,需要" "

    數據庫句柄的地址(指針)

    以上函數表示的就是打開這個數據庫文件,放入到句柄的中

    因為你傳遞的參數是句柄的地址,因此我可以改變句柄的內容

    返回值:

    如果當前的函數成功運行,就會返回一個SQLITE_OK

    編寫代碼之前我們需要進行一些準備工作:

    1.需要保證當前的文件夾內有一個sqlite3.c sqlite3.h這兩個文件

     

    這個時候你就可以敲代碼了

    #include <stdio.h> #include "sqlite3.h"//包含數據庫函數所在的頭文件 //因為sqlite3.c.h都與當前文件為同一文件夾因此使用"" int main(int argc, char const *argv[]) { sqlite3*db;//創建一個數據庫句柄db int ret = sqlite3_open("haha.db",&db); //ret就是用來接返回值,如果函數正確的運行返回值就是 //SQLITE_OK if (ret !=SQLITE_OK) { printf("數據庫打開出錯\n"); } else printf("數據庫打開成功\n"); return 0; }

     

    2.對數據庫關閉操作

    SQLITE_API int sqlite3_close(sqlite3*);

    參數:

    數據庫句柄db

    返回值:

    如果當前的函數成功運行,就會返回一個SQLITE_OK

    編寫代碼:

    #include <stdio.h> #include "sqlite3.h"//包含數據庫函數所在的頭文件 //因為sqlite3.c.h都與當前文件為同一文件夾因此使用"" int main(int argc, char const *argv[]) { sqlite3*db;//創建一個數據庫句柄db int ret = sqlite3_open("haha.db",&db); //ret就是用來接返回值,如果函數正確的運行返回值就是 //SQLITE_OK if (ret !=SQLITE_OK) { printf("數據庫打開出錯\n"); } else printf("數據庫打開成功\n"); ret = sqlite3_close(db); if (ret !=SQLITE_OK) { printf("數據庫關閉出錯\n"); } else printf("數據關閉成功\n"); return 0; }

     

    3.對數據庫寫操作

    SQLITE_API int sqlite3_exec(

    sqlite3*, /* An open database */

    const char *sql, /* SQL to be evaluated */

    int (*callback)(void*,int,char**,char**), /* Callback function */

    void *, /* 1st argument to callback */

    char **errmsg /* Error msg written here */

    );

    參數:

    打開的數據庫句柄

    sql語句字符串

    同時調用的函數名稱 一般寫NULL

    傳遞給函數的參數 一般寫NULL

    錯誤信息的存儲位置

    返回值:

    如果當前的函數成功運行,就會返回一個SQLITE_OK

    代碼編寫:

    #include <stdio.h> #include "sqlite3.h"//包含數據庫函數所在的頭文件 //因為sqlite3.c.h都與當前文件為同一文件夾因此使用"" int main(int argc, char const *argv[]) { sqlite3*db;//創建一個數據庫句柄db int ret = sqlite3_open("haha.db",&db);//---------------打開 //ret就是用來接返回值,如果函數正確的運行返回值就是 //SQLITE_OK if (ret !=SQLITE_OK) { printf("數據庫打開出錯\n"); } else printf("數據庫打開成功\n"); // 1.思考自己要做的操作:新建一個表 // 2.寫一個創建表的sql語句 char *cmd = "create table persons (id int ,name text);"; // 3.看自己是讀操作還是寫操作 // 如果是寫操作就使用sqlite3_exec // 如果是讀操作就使用sqlite3_get_table // 4.調用就行了 char *errmsg = NULL; sqlite3_exec(db,cmd,NULL,NULL,&errmsg); ret = sqlite3_close(db);//-------------------------------關閉 if (ret !=SQLITE_OK) { printf("數據庫關閉出錯\n"); } else printf("數據關閉成功\n"); return 0; } //編譯gcc xxx.c sqlite3.c -lpthread -ldl

    4.對數據庫讀操作

    SQLITE_API int sqlite3_get_table(

    sqlite3 *db, /* An open database */

    const char *zSql, /* SQL to be evaluated */

    char ***pazResult, /* Results of the query */

    int *pnRow, /* Number of result rows written here */

    int *pnColumn, /* Number of result columns written here */

    char **pzErrmsg /* Error msg written here */

    );

    參數:

    你打開的數據庫句柄 --------也就是你要對哪個數據庫進行讀操作;

    你要進行讀操作的SQL語句(查)

    查詢到的結果集表的地址

    你查到的結果集表的行數(查詢到的數據行數)

    你查到的結果集表的列數(查詢到的數據列數)

    錯誤信息

    返回值:

    如果當前的函數成功運行,就會返回一個SQLITE_OK

     

    寫操作:

    #include <stdio.h>
    #include "sqlite3.h"
    int main()
    {
    	//打開數據庫
    	sqlite3 *db;//操作數據庫的句柄
    
    	int ret  = sqlite3_open("./my.db",&db);
    	if(ret != SQLITE_OK)
    	{
    		printf("沒有打開成功\n");
    	}
    	//通過一個API來執行 想要執行的命令
    	//char cmd[256]="insert into person values(10,\"hehe\");";
    	char *errmsg=NULL;
    	char name[256]="";
    	int id=0;
    	char cmd[256]="";
    	while(1)
    	{
    		//讓用戶輸入 
    		scanf("%d %s",&id,name);
    		if(id == -1)
    		{
    			break;
    		}
    		sprintf(cmd,"insert into person values(%d,\"%s\");",id,name);
    		sqlite3_exec(db,cmd,NULL,NULL,&errmsg);//執行sql語句
    		if(errmsg != NULL)
    		{
    			printf("%s\n",errmsg);
    			break;
    		}
    	}
    	sqlite3_close(db);
    	return 0;
    }

     

    讀操作:

    #include <stdio.h>
    #include "sqlite3.h"
    int main(int argc, char *argv[])
    {
    	//打開數據庫
    	sqlite3 *db=NULL;
    	int ret = sqlite3_open("./my.db",&db);
    	if(ret != SQLITE_OK)
    	{
    		printf("打開數據庫失敗\n");
    		return 0;
    	}
    	//讀取數據庫
    	char **table =NULL;
    	char *err=NULL;
    	int row=0;
    	int col=0;
    	char cmd[256]="select * from person;";
    	sqlite3_get_table(db,cmd,&table,&row,&col,&err);
    	if(err != NULL)
    	{
    		printf("%s\n",err);
    	}
    	//打印出 查詢到的內容
    	//10 hehe
    	//20 heihei
    	int i=0;
    	for(i=0;i<row;i++)
    	{
    		int j=0;
    		for(j=0;j<col;j++)
    		{
    			printf("%s ",table[i*col+j]);
    		}
    		printf("\n");
    	
    	}
    	//關閉數據庫
    	sqlite3_close(db);
    
    	return 0;
    }

     

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

    智能推薦

    sqlite3數據庫C語言簡單操作基礎之數據的增刪改(二)

    轉載至:https://blog.csdn.net/dancer__sky/article/details/79041587 概述:前面記錄了sqlite3數據庫c接口的一些基礎API的功能介紹以及數據庫文件創建及表的創建,今天主要就是記錄一下數據庫數據的增刪改,為啥這里沒說查,后面會單獨做一個查的筆記。畢竟查可能就有點不一樣了,它是有返回值的,所以就分類到下次記錄吧。 1,插入數據 主要還是看s...

    Sqlite3 stmt 機制操作

      參考文獻:https://blog.csdn.net/u012351051/category_8966045.html         sqlite 提供了SQL語句執行的函數sqlite3_exec,本文介紹的是sqlite3_stmt方式對數據庫進行操作。         官方文檔以及參考資料中給出的...

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

    統計學習方法 - 樸素貝葉斯

    引入問題:一機器在良好狀態生產合格產品幾率是 90%,在故障狀態生產合格產品幾率是 30%,機器良好的概率是 75%。若一日第一件產品是合格品,那么此日機器良好的概率是多少。 貝葉斯模型 生成模型與判別模型 判別模型,即要判斷這個東西到底是哪一類,也就是要求y,那就用給定的x去預測。 生成模型,是要生成一個模型,那就是誰根據什么生成了模型,誰就是類別y,根據的內容就是x 以上述例子,判斷一個生產出...

    styled-components —— React 中的 CSS 最佳實踐

    https://zhuanlan.zhihu.com/p/29344146 Styled-components 是目前 React 樣式方案中最受關注的一種,它既具備了 css-in-js 的模塊化與參數化優點,又完全使用CSS的書寫習慣,不會引起額外的學習成本。本文是 styled-components 作者之一 Max Stoiber 所寫,首先總結了前端組件化樣式中的最佳實踐原則,然后在此基...

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