• <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使用

    SQLite3 使用

    1SQLite官方網站下載SQLite3的源程序,下載地址:
    http://www.sqlite.org

    2、本文使用下載原碼的方式編譯并使用,也可下載動態庫進行使用

    3、將sqlite3.hsqlite3ext.h shell.c加入工程目錄

    4、使用:在工程下包含sqlite3.h就可以,代碼如下

    #include <iostream>
    #include "sqlite3.h"
    using namespace std;
    
    int testdb(void);
    
    int main()
    {
    	testdb();
    	return 0;
    }
    
    int testdb(void)
    
    {
    
    	sqlite3 *db=NULL;
    
    	char *zErrMsg = 0;
    
    	int rc;
    
    
    
    	//打開指定的數據庫文件,如果不存在將創建一個同名的數據庫文件
    
    	rc = sqlite3_open("zsl.db", &db);
    
    	if( rc )
    	{
    
    		fprintf(stderr, "Can’t open database: %s\n", sqlite3_errmsg(db));
    
    		sqlite3_close(db);
    
    		return (1);
    	}
    	else
    	{
    		printf("You have opened a sqlite3 database named zsl.db successfully!\n");
    	}
    
    	//創建一個表,如果該表存在,則不創建,
    
    	//并給出提示信息,存儲在zErrMsg 中
    
    	//char *sql = " CREATE TABLE test(ID INTEGER PRIMARY KEY,PROVINCE INTEGER,LEVEL INTEGER,NAME VARCHAR(12),HOMEDIS REAL);" ;
    	char *sql = " CREATE TABLE test(ID INTEGER PRIMARY KEY,AGE INTEGER,LEVEL INTEGER,NAME VARCHAR(12),SALARY REAL);" ;
    
    	sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
    
    
    
    	//插入數據
    	sql = "INSERT INTO \"test\" VALUES(1 , 2 , 4 , 'ji', 3.0);" ;
    
    	sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
    
    	sql = "INSERT INTO \"test\" VALUES(100 , 92 , 84 , 'li', 9.9);" ;
    
    	sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
    
    
    	int nrow = 0, ncolumn = 0; //查詢結果集的行數、列數
    
    	char **azResult; //二維數組存放結果
    
    
    
    	//查詢數據
    
    	sql = "SELECT * FROM test ";
    
    	sqlite3_get_table( db , sql , &azResult , &nrow , &ncolumn , &zErrMsg );
    
    	int i = 0 ;
    
    	printf( "row:%d column=%d \n" , nrow , ncolumn );
    
    	printf( "\nThe result of querying is : \n" );
    
    	for( i=0 ; i<( nrow + 1 ) * ncolumn ; i++ )
    
    		printf( "azResult[%d] = %s\n", i , azResult[i] );
    
    
    
    	//刪除數據
    
    	sql = "DELETE FROM test WHERE AGE = 1 ;" ;
    
    	sqlite3_exec( db , sql , 0 , 0 , &zErrMsg );
    
    	//釋放掉azResult 的內存空間
    
    	sqlite3_free_table( azResult );
    
    	sqlite3_close(db); //關閉數據庫
    
    	return 0;
    
    }

    執行結果:


    5、其他

    值得注意的地方,在于在使用sqlite3 的時候,你會發現存儲的過程中會出現中文的亂碼,那是因為,SQLite3數據庫默認的編碼格式為UTF-8,所以在使用之前,需要對你的格式進行轉換。

    以VC++ MFC為例,如果你的程序使用的是默認Unicode編碼,那么只需要Unicode->UTF-8的轉換,如果你是使用的多字節字符集,那么系統默認的編碼格式應該是Ansi,這時候,你需要將編碼從Ansi轉換到Unicode,然后從Unicode轉換到UTF-8。


    //Ansi To Utf-8 Utf-8 To Ansi
    char* *****::AnsiToUtf8(char* stransi)
    {
        //Ansi to Unicode
        int wcsLen = ::MultiByteToWideChar(CP_ACP,NULL,stransi,strlen(stransi),NULL,0);
        wchar_t* strunicode = new wchar_t[wcsLen+1];
        ::MultiByteToWideChar(CP_ACP,NULL,stransi,strlen(stransi),strunicode,wcsLen);
        strunicode[wcsLen] = '\0';
        //Unicode To UTF-8
        int utf8len = ::WideCharToMultiByte(CP_UTF8,NULL,strunicode,wcslen(strunicode),NULL,0,NULL,NULL);
        char* strutf8 = new char[utf8len+1];
        ::WideCharToMultiByte(CP_UTF8,NULL,strunicode,wcslen(strunicode),strutf8,utf8len,NULL,NULL);
        strutf8[utf8len] = '\0';
        
        delete [] strunicode;
        strunicode = NULL;
        return strutf8;
    
    }
    char* ***::Utf8ToAnsi(char* strutf8)
    {
        //UTF-8 To Unicode
        
        int wlen = ::MultiByteToWideChar(CP_UTF8,NULL,strutf8,strlen(strutf8),NULL,0);
        wchar_t* strunicode = new wchar_t[wlen+1];
        ::MultiByteToWideChar(CP_UTF8,NULL,strutf8,strlen(strutf8),strunicode,wlen);
        strunicode[wlen] = '\0';
        
        //Unicode To Ansi
        int    ansilen = ::WideCharToMultiByte(CP_ACP,NULL,strunicode,wcslen(strunicode),NULL,0,NULL,NULL);
        char* szAnsi = new char[ansilen+1];
        ::WideCharToMultiByte(CP_ACP,NULL,strunicode,wcslen(strunicode),szAnsi,ansilen,NULL,NULL);
        szAnsi[ansilen] = '\0';
        delete [] strunicode;
        strunicode = NULL;
        return szAnsi;
    }

    注意這段代碼中,使用了2個new,但是只delete了一個,這里需要你在使用完成轉換后的字符串,進行手動delete,否則可能造成內存泄漏。

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

    智能推薦

    Django 提交 form 表單(使用sqlite3保存數據)

    優化 提交 form 表單,https://www.cnblogs.com/klvchen/p/10608143.html 創建數據庫的字段,在 models.py 中添加 修改 settings.py 文件 初始化數據庫 修改 urls.py 文件 修改 views.py 文件 啟動 web 服務 瀏覽器訪問 http://127.0.0.1:8888/userInfo...

    Sqlite3使用手冊

    Sqlite3使用手冊 基于自身需要,開始學習使用sqlite3數據庫,下面放一些基礎但關鍵的操作。 安裝 傻瓜式安裝,直接安裝即可,隨后在命令行中敲擊sqlite3即可喚醒 常用基礎操作 命令 描述 .dump ?TABLE? 以 SQL 文本格式轉儲數據庫。如果指定了 TABLE 表,則只轉儲匹配 LIKE 模式的 TABLE 表。 .databases 列出數據庫的名稱及其所依附的文件。 ....

    Coco2dx中sqlite3的使用

    當前cocos2dx版本3.17.2 sqlite3 大體上參考這位前輩https://blog.51cto.com/shahdza/1614851 如果自己測試時報這種錯 嚴重性    代碼    說明    項目    文件    行 ...

    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 以上述例子,判斷一個生產出...

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