sqlite3入門
轉載地址:https://www.cnblogs.com/IamLoser/p/6648396.html https://baike.baidu.com/item/SQLite/375020
sqllite簡介:
SQLite,是一款輕型的數據庫,是遵守ACID的關系型數據庫管理系統,它包含在一個相對小的C庫中。它是D.RichardHipp建立的公有領域項目。它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它占用資源非常的低,在嵌入式設備中,可能只需要幾百K的內存就夠了。它能夠支持Windows/Linux/Unix等等主流的操作系統,同時能夠跟很多程序語言相結合,比如 Tcl、C#、PHP、Java等,還有ODBC接口,同樣比起Mysql、PostgreSQL這兩款開源的世界著名數據庫管理系統來講,它的處理速度比他們都快。
常用語法:
(1)創建數據庫:sqlite3 xxx.db
(2)創建表
(3)刪除表
(4)INSERT INTO語法
(5)SELECT語法
(6)WHERE語法
(7)UPDATE語法
(8)DELETE語法
linux C中編譯方式:gcc opendbsqlite.c -o db.out -lsqlite3 -L/usr/local/sqlite3/lib -I/usr/local/sqlite3/include
主要函數:
(1)最重要的三個函數:
int sqlite3_open(const char*, sqlite3**);
int sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void*, char**);
int sqlite3_close(sqlite3*);
還有2個:
const char *sqlite3_errmsg(sqlite3*);
void sqlite3_free(void*);
查看更多函數,下載sqlite源碼包,只需要其中的sqlite3.c、sqlite.h即可。
(2)sqlite3_open 返回一個整數錯誤代碼,=0 表示成功碼,> 0都是錯誤碼,詳情看Sqlite3手冊說明
函數用于打開/創建一個函數庫
const char* 指定文件名,sqlite3** 指定數據庫句柄,用戶通過數據庫句柄操作數據庫
(2)sqlite3_exec返回0表示sql指令執行完畢,否則說明這次執行沒有成功
函數用于執行一條或多條SQL語句,SQL語句之間用“;”隔開
sqlite3*指定已打開的數據庫句柄,const char *sql 指定SQL指令,sqlite_callback 在回調函數中可以獲得SQL執行的結果
void* 指定傳給回調函數的數據 , char** 指定命令執行失敗的詳細錯誤信息
(3)回調函數
(4) sqlite3_close 關閉數據庫文件,參數是數據庫句柄
(5)sqlite3_errmsg 返回錯誤碼所對應的文字說明,參數是數據庫句柄
(6)sqlite3_free 釋放存放錯誤信息的內存空間,sqlite3_errmsg 返回的errmsg必須用此函數釋放
(7)簡單測試代碼
#include <stdio.h>
#include <sqlite3.h>
int callback(void *pv,int argc,char **argv,char **col)
{
int cnt_i = 0;
for(cnt_i =0;cnt_i < argc;cnt_i++)
{
printf("%s\t%s\n",col[cnt_i],argv[cnt_i]);
}
printf("\n");
return 0;
}
int main(void)
{
sqlite3 *db;
int result = 0;
char *rerrmsg = NULL;
char *sql = NULL;
char *data = "callback";
result = sqlite3_open("sample.db",&db);
if(result > 0)
{
printf("open database err:%s\n",sqlite3_errmsg(db));
return -1;
}
else
{
printf("open database successfully!\n");
sql = "CREATE TABLE STUDENT(" \
"NUM INT PRIMARY KEY NOT NULL," \
"NAME TEXT NOT NULL," \
"AGE INT NOT NULL," \
"SORCE REAL);";
result = sqlite3_exec(db,sql,callback,NULL,&rerrmsg);
if(result != 0)
{
printf("creat table err:%s\n",rerrmsg);
sqlite3_free(rerrmsg);
return -2;
}
else
{
printf("create table successfully!\n");
sql = "INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)" \
"VALUES(1,'Paul',13,99.1);" \
"INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)" \
"VALUES(2,'Kate',15,94.1);" \
"INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)" \
"VALUES(3,'Jim',12,95.1);" \
"INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)" \
"VALUES(4,'Tom',13,99.4);" \
"INSERT INTO STUDENT(NUM,NAME,AGE,SORCE)" \
"VALUES(5,'Jack',13,89.1);";
result = sqlite3_exec(db,sql,callback,NULL,&rerrmsg);
if(result != 0)
{
printf("insert data err:%s\n",rerrmsg);
sqlite3_free(rerrmsg);
return -3;
}
else
{
printf("insert data successfully!\n");
sql = "SELECT * FROM STUDENT";
result = sqlite3_exec(db,sql,callback,(void *)data,&rerrmsg);
if(result != 0)
{
printf("select data err:%s\n",rerrmsg);
sqlite3_free(rerrmsg);
return -4;
}
else
{
printf("select data successfully!\n");
}
}
}
}
sqlite3_close(db);
return 0;
}
完!!
智能推薦
裸機移植sqlite3
上一篇文章中提供了vfs支持,此處主要是sqlite3移植所需的線程,信號量支持,sqlite3源碼在官方下載,需要很大的內存支持,移植基本原理就是實現sqlite3所需的linux api接口即可,可以通過宏定義去掉一些不用的功能,減少API依賴。 ucos_iii_pthread.c //ucos_iii_pthread.h 請先初始化ucos以及文件系統,然后就可以初始化sqlite3,并查...
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...
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...
Python SQLite3 迭代器
需求: 遍歷一個指定文件夾,將指定文件夾下的文件名稱寫入到數據庫對應的列中,如果數據庫行中的數據與文件的名字相同,則將對應的文件名寫入匹配行的相對應的列中 數據庫如下圖: 注意:通過cursor.execute()所獲得的對象是一個可迭代對象*,如果把這個可迭代對象用在for的嵌套循環中的話,會出錯,達不到預期結果*(此處我踩了10多分鐘坑,最后調試才發現問題),必須先創建一個集合,對cursor...
猜你喜歡
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_...