Sqlite 數據庫:
1.1 SQL 語法: http://www.w3school.com.cn/sql/
- SQL 語句對大小寫不敏感。
表名稱 mytable , 列: id name iage
1.1.1
SELECT - 從數據庫表中獲取數據
SELECT 列名稱 FROM 表名稱
SELECT * FROM 表名稱
Select id from mytable ; // 從表中顯示id 信息
Select id,name from mytable ; // 返回 id name 信息
Select id,name,value from mytbale; // 返回 id name value
的信息 SELECT 列名稱 FROM 表名稱 WHERE 列 運算符 值 下面的運算符可在
WHERE 子句中使用:

1.1.2
UPDATE - 更新數據庫表中的數據
UPDATE 表名稱 SET 列名稱 = 新值 WHERE 列名稱 = 某值
UPDATE mytable SET name= 'Fred' WHERE id=”1” ;
UPDATE mytable SET name= 'Zhongshan', age= “11” WHERE id= “4” ;
1.1.3 DELETE - 從數據庫表中刪除數據
DELETE FROM 表名稱 WHERE 列名稱 = 值
DELETE FROM mytable WHERE id=”1”;
1.1.4 INSERT INTO - 向數據庫表中插入數據
INSERT INTO 表名稱 VALUES (值1, 值2,....)
INSERT INTO Persons VALUES ('Gates', 'Bill', 'Xuanwumen 10', 'Beijing')
INSERT INTO Persons (LastName, Address) VALUES ('Wilson', 'Champs-Elysees')
1.2 linux下 sqlite 的命令:
sqlite3 test.db ,創建一個名為test.db 的數據庫 ;
Create table mytable(id,name,age); 創建了一個名字叫mytabel的數據表,該數據表內定義了三個字段,分別為 id、name、age。
.mode column (注意沒有分號),設置為列顯示模式
.databases 查看數據庫信息
sqlitebrowser test.db 圖形化顯示數據庫.
1.3 嵌入式C 對 sqlite的操作:
常用函數
sqlite3_open(const char *filename, sqlite3 **ppDb);
sqlite3_close(sqlite3 *db);
sqlite3_exec(sqlite3*, const char *sql, int (*callback)(void*,int,char**,char**), void *, char **errmsg);
這三個函數基本上能完成對sqlite3的所有操作。需要用的頭文件為”sqlite3.h”。
打開(新建)數據庫
sqlite3 *db;
sqlite3_open(“test.db”, &db);
關閉數據庫
sqlite3_close(db);
執行sql語句(以創建表為例)
char sql[128];
memset(sql, '\0', 128);
sprintf(sql, "%s%s%s", "create table ", "test_tb", "(id INTEGER PRIMARY KEY, data TEXT)");
sqlite3_exec(db, sql, NULL, NULL, NULL);
sqlite3_exec中第一個參數:數據庫名。
第二個參數 sql 操作語句。
第三個參數是一個回調(callback)函數。
第四個參數可用于給回調函數傳入一個參數。
sqlite3_exec函數的返回指,它返回一個整型的數,
編譯:arm-linux-gnueabihf-gcc -o test sqlite.c -lsqlite3
示例:
#include <stdio.h>
#include <string.h>
#include <sqlite3.h>
/* callback函數中:
* arg: 是從主函數傳進來的參數
* values: 是查詢結果的值
* names: 查詢結果列的名字
*/
int wf_callback(void *arg, int nr, char **values, char **names)
{
printf("wf_callback is called \n");
int i;
char str[128];
for (i=0; i<nr; i++) {
printf("id =%s, %s \n",names[i] ,values[i] );
}
return 0;
}
int main()
{
char sql[128];
sqlite3 *db;
sqlite3_open("test.db", &db); //打開(或新建)一個數據庫
memset(sql, '\0', 128);
/* 新建一張表 */
strcpy(sql, "create table mytable (id,name,age)");
sqlite3_exec(db, sql, NULL, NULL, NULL);
memset(sql, '\0', 128);
strcpy(sql, "insert into mytable values ('1','luan','20')");
sqlite3_exec(db, sql, NULL, NULL, NULL);
memset(sql, '\0', 128);
strcpy(sql, "insert into mytable values ('2','sun','21')");
sqlite3_exec(db, sql, NULL, NULL, NULL);
memset(sql, '\0', 128);
strcpy(sql, "insert into mytable values ('3','wang','22')");
sqlite3_exec(db, sql, NULL, NULL, NULL);
memset(sql, '\0', 128);
strcpy(sql, "select * from mytable");
sqlite3_exec(db, sql, wf_callback, NULL, NULL);
sqlite3_close(db); //關閉數據庫
return 0;
}
1.4 嵌入式編譯、配置:
./configure –host=arm-linux-gnueabihf –prefix=$PWD/temp_install
Sudo make
Sudo make install
將編譯好的頭文件、動態庫復制到工具鏈中
sudo cp sqlite3ext.h sqlite3.h /usr/arm-linux-gnueabihf/include/
sudo cp libsqlite3.so libsqlite3.so.0.8.6 libsqlite3.so /usr/arm-linux-gnueabihf/lib/
將編譯好的動態庫 復制到文件系統中:
sudo cp libsqlite3.so.0 libsqlite3.so.0.8.6 libsqlite3.so /home/book/work/rootfs_min/lib -rf
回調函數的格式如下:
int sqlite_callback(
void* pv, /* 由 sqlite3_exec() 的第四個參數傳遞而來 */
int argc, /* 表的列數 */
char** argv, /* 指向查詢結果的指針數組, 可以由 sqlite3_column_text() 得到 */
char** col /* 指向表頭名的指針數組, 可以由 sqlite3_column_name() 得到 */
);
參數格式:
傳給sqlite3_exec的回調函數,用來顯示查詢結果
對每一條查詢結果調用一次該回調函數
參數:
pv:由sqlite3_exec傳遞的初始化參數
argc:表頭的列數
col:表頭的名字數組指針
argv:表頭的數據數組指針
返回值:
1:中斷查找
0:繼續列舉查詢到的數據示例表:
+———————————–+
id | pic | data(16進制數據) |
---|---|---|
1 | a.jpg | 00 00 00 … |
2 | b.jpg | XX XX XX |
+———————————–+
對第一行數據:
argc=3 即 [0]…[2]
argv[0]=”1”,argv[1]=”a.jpg”,argv[2]=”00 00 00…”(實際16進制數據,非這里顯示的字符串形式)
col[0]=”id”,col[1]=”pic”,col[2]=”data” 說明:
sqlite3_exec() 的回調函數必須按照此格式, 當然形參的名字任意.
如果某列的數據類型不是char*, 則可以對結果執行相關的轉換, 如:用atoi()把結果轉換為整數(integer), 如果是二進制數據, 則可以直接強制類型轉換, 如:(void*)argv[i].
該回調函數有兩種返回值類型.
1.返回零:sqlite3_exec() 將繼續執行查詢.
2.返回非零:sqlite3_exec()將立即中斷查詢, 且 sqlite3_exec() 將返回 SQLITE_ABORT.
示例:
for (i=0; i<nr; i++) {
printf(" %s, %s ;",names[i] ,values[i] );
}
printf("\n");
執行 select * from mytable
id name age
* 1 luan 20
2 sun 21
3 wang 22
回調函數將被執行3 次
其中nr 為 表的列數 , names 的值為 mytable 的列屬性, val為列屬性對應的值
wf_callback is called
id, 1 ; name, luan ; age, 20 ;
wf_callback is called
id, 2 ; name, sun ; age, 21 ;
wf_callback is called
id, 3 ; name, wang ; age, 22 ;
*/
智能推薦
數據庫SQLite<一>
一、SQLite數據庫簡介 SQLite第一個Alpha版本誕生于2000年5月,它是一款輕量級數據庫,它的設計目標是嵌入式的,占用資源非常的低,只需要幾百K的內存就夠了。SQLite已經被多種軟件和產品使用,Mozilla FireFox就是使用SQLite來存儲配置數據的,Android和iPhone都是使用SQLite來存儲數據的。 二、Android中如何使用SQLite 1. 使用SQL...
《Python》《SQLite》Python連接SQLite數據庫,讀表
配置Python環境的方法在我的博客中已經詳細介紹。 一、SQLite和PySQLite 在最近的Python版本中(從2.5開始),SQLite的優勢在于它的一個包裝(PySQLite)已經被包括在標準庫內。SQLite在Python中的模塊名稱為“sqlite3”,我們可以在...
《SQLite》最輕巧的數據庫SQLite——初探
文章目錄 一、SQLite概念及優點 二、SQLite圖形化管理工具——SQLite Expert Professional 三、SQLite基礎語言 1、創建數據庫 2、刪除數據庫 3、創建表 4、刪除表 5、表操作語句 一、SQLite概念及優點 概念: SQLite是一款嵌入式數據庫,和Oracle、Mysql、DB2等數據庫不同,比如Oracle它是與程序分離的,而...
Android數據庫 之 SQLite數據庫
2019獨角獸企業重金招聘Python工程師標準>>> 每個應用程序都要使用數據,Android應用程序也不例外,Android使用開源的、與操作系統無關的SQL數據庫—SQLite。 SQLite第一個Alpha版本誕生于2000年5月,它是一款輕量級數據庫,它的設計目標是嵌入式的,占用資源非常的低,只需要幾百K的內存就夠了。 SQLite已經被多種軟件和產品使用,...
猜你喜歡
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_...