Windows 中SQLite3 使用(2) -- 基本導出函數

Windows SQLite3 使用(2–- 基本導出函數

 

一、概述

SQLite3 的最常使用基本導出函數有五個:

sqlite3_open:打開(鏈接到) SQLite3 數據庫。

sqlite3_close:關閉 SQLite3 數據庫連接。

sqlite3_exec:對於已打開的數據庫連接,執行 SQL 語句。

sqlite3_get_table:對於已打開的數據庫連接,查詢數據庫。

sqlite3_free:釋放 SQLite 內部分配的內存。

 

二、使用

SQLite3 使用非常簡單,像 Windows 大部分 API 一樣,先打開對應的資源,獲得句柄,然後對資源進行操縱,最後關閉句柄。

下面的代碼演示其過程(代碼中含有大量註釋,具體函數調用過程可看註釋):

#include "stdafx.h"

#include "sqlite3.h"

#include <windows.h>

#pragma comment(lib, "sqlite3.lib")

 

void PrintInfo(LPCSTR* pPrintInfo, int nRows, int nCols)

{

     LPCSTR lpszTemp = NULL;

     for (int nRowIndex = 0; nRowIndex <= nRows; nRowIndex++)     // nRowIndex = 0 時,查找到的是表頭

     {

         for (int nColIndex = 0; nColIndex < nCols; nColIndex++)

         {

              lpszTemp = *(pPrintInfo + nRowIndex * nCols + nColIndex);    // 信息是直接累加的,前面是表頭

              if (lpszTemp)

              {

                   printf(lpszTemp);

                   printf("/n");

              }

         }

         printf("---------------------------------------/n");

     }

     printf("=======================================================/n");

}

 

void main()

{

     sqlite3* pSQLite = NULL;

     int nRet = 0;

     LPCSTR lpszSQL1 = "create table people(name varchar(20), age int, birthday datetime);";      // 創建表格people SQL 語句

     LPCSTR lpszSQL2 = "insert into people values('wang',20,'1990-6-3');";                        // 插入信息的SQL 語句

     LPCSTR lpszSQL3 = "insert into people values('li',21,'1989-3-2');";

     LPCSTR lpszSQL4 = "select * from people;";                                                             // 查找表格people 的所有信息的SQL 語句

     LPCSTR lpszSQL5 = "delete from people where name='wang';";                                        // 刪除姓名爲"wang" 的信息

     LPSTR* plpszResult = NULL;

     int nRows = 0;

     int nCols = 0;

 

     nRet = sqlite3_open("C://SQLite3_Test.db", &pSQLite);   // 鏈接到數據庫,如果成功,數據庫句柄指針存儲於pSQLite

     if (nRet != SQLITE_OK)                                       // 函數返回SQLITE_OK 表示連接成功,否則直接退出連接

         goto Exit0;

 

     nRet = sqlite3_exec(pSQLite, lpszSQL1, NULL, NULL, NULL);        // 執行SQL 語句,創建people

     if (nRet != SQLITE_OK)

         goto Exit0;

 

     nRet = sqlite3_exec(pSQLite, lpszSQL2, NULL, NULL, NULL);        // 執行SQL 語句,將信息插入表格

     if (nRet != SQLITE_OK)

         goto Exit0;

 

     nRet = sqlite3_exec(pSQLite, lpszSQL3, NULL, NULL, NULL);

     if (nRet != SQLITE_OK)

         goto Exit0;

 

     nRet = sqlite3_get_table(pSQLite, lpszSQL4, &plpszResult, &nRows, &nCols, NULL);    // 查詢表格中所有信息

     if (nRet != SQLITE_OK)

         goto Exit0;

 

     PrintInfo((LPCSTR*)plpszResult, nRows, nCols); // 輸出查詢到的信息

 

     nRet = sqlite3_exec(pSQLite, lpszSQL5, NULL, NULL, NULL);    // 刪除姓名爲"wang" 的信息

     if (nRet != SQLITE_OK)

         goto Exit0;

 

     nRet = sqlite3_get_table(pSQLite, lpszSQL4, &plpszResult, &nRows, &nCols, NULL);

     if (nRet != SQLITE_OK)

         goto Exit0;

 

     PrintInfo((LPCSTR*)plpszResult, nRows, nCols); // 當刪除一項後,再打印出數據庫中的信息

 

Exit0:

     if (plpszResult)

     {

         if (*plpszResult)

         {

              sqlite3_free(*plpszResult);

              *plpszResult = NULL;

         }

     }

 

     if (pSQLite)

     {

         sqlite3_close(pSQLite);     // 關閉SQLite 數據庫連接

         pSQLite = NULL;

     }

     DeleteFile("C://SQLite3_Test.db");   // 刪除用於測試的文件

     return;

}

 

三、使用時的線程安全

Windows 中,SQLite3 是線程安全的,但使用時也必須遵守規定:一個 sqlite3 結構體指針,只能在一個線程中使用,如果需要將此 sqlite3 結構體傳遞給其他線程,則必須先複製一份,然後傳遞。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章