目錄
一,SQLite簡介
①?SQLite與傳統(tǒng)服務器型數(shù)據(jù)庫
②?SQLite與MySQL比較
③ 基于嵌入式的數(shù)據(jù)庫種類
二,SQLite數(shù)據(jù)庫安裝
① 輸入命令安裝
② 網頁安裝
● 安裝步驟
三,SQLite命令用法
●?創(chuàng)建一個數(shù)據(jù)庫
●?創(chuàng)建一張表格
●?插入一條記錄
●?查看數(shù)據(jù)庫的記錄
●?刪除一條記錄
●?更改一條記錄
●?刪除一張表
●?增加一列
四,SQLite的編程操作
① C代碼打開/創(chuàng)建數(shù)據(jù)庫及錯誤提示
● 相關API及說明
● 返回值和錯誤碼
● 代碼實現(xiàn)
● 編譯及結果說明
② C代碼執(zhí)行SQL語句
● 相關API及說明
● 代碼實現(xiàn)
● 編譯及結果說明
③ C代碼建表和插入數(shù)據(jù)
● 代碼說明
④ SELECT,UPDATE,DELETE
● SELECT操作(查找)
● UPDATE操作(更改)
●?DELETE操作(刪除)
?五,SQLite函數(shù)查詢網址
一,SQLite簡介
①?SQLite與傳統(tǒng)服務器型數(shù)據(jù)庫
②?SQLite與MySQL比較
SQLite
|
MySQL
|
|
優(yōu)點 |
● 基于文件,易于設置 和使用;
● 適合基礎開發(fā)和測試 輕松攜帶;
● 使用標準
SQL
語法進行微小更改,使用方便。
|
● 使用方便,提供了許多與數(shù)據(jù)庫相關的功能;
● 良好的安全功能,易于擴展,適用于大型數(shù)據(jù)庫;
● 提供良好的速度和性能;
● 提供良好的用戶管理和;
● 多種訪問控制。
|
缺點 |
● 缺乏用戶管理和安全功能;
● 不容易擴展;
● 不適合大數(shù)據(jù)庫 無法定制;
|
● 需要一些技術專業(yè)知識來設置;
● 與傳統(tǒng)
SQL
相比,語法略有不同。
|
③ 基于嵌入式的數(shù)據(jù)庫種類
基于嵌入式的數(shù)據(jù)庫主要有: SQLite , Firebird , Berkeley DB , eXtremeDB● SQLite ?: 關系型數(shù)據(jù)庫,體積小,支持 ACID 事務● Firebird ?: 是關系型數(shù)據(jù)庫,功能強大,支持存儲過程, SQL 兼容等● Berkeley DB ?: 并沒有數(shù)據(jù)庫服務器的概念,他的程序直接鏈接到應用程序中● eXtremeDB ?: 是內存數(shù)據(jù)庫,運行效率高
二,SQLite數(shù)據(jù)庫安裝
① 輸入命令安裝
sudo apt-get -y install sqlite
② 網頁安裝
https://www.sqlite.org/download.html
● 安裝步驟
? 1. 把下載的文件 sqlite-autoconf-3390000.tar.gz 上傳到開發(fā)板? ?2. tar xvf sqlite-autoconf-3390000.tar.gz 解壓? ? ? //解壓命令:tar xvf3. cd sqlite-autoconf-3390000 進入文件夾4. ./configure --prefix=/usr/local 配置安裝路徑在/usr/local5. make 編譯 // 比較久 10分鐘6. sudo make install 安裝 ?此方法可直接直接用于Ubuntu
?
?如上圖,安裝成功過后,運行sqlite3 進入SQL命令操作流程
三,SQLite命令用法
●?創(chuàng)建一個數(shù)據(jù)庫
方式一:
1. sqlite3 進入數(shù)據(jù)庫2. .open test.db3. .quit數(shù)據(jù)庫退出后在命令當前路徑輸入命令 ls 顯示創(chuàng)建的數(shù)據(jù)庫 test.db
方式二:
sqlite3 test.db // 在命令運行當前窗口創(chuàng)建數(shù)據(jù)庫 test.db在數(shù)據(jù)庫命令下.databases 列出當前打開的數(shù)據(jù)庫.quit 退出
●?創(chuàng)建一張表格
create table stu(id Integer,name char,score Integer);
●?插入一條記錄
insert into stu values(18130106,'huang',99);insert into stu?values(18130101,"gang",100);? ? //'' 和 "" 都行insert into stu(name,score) values("huanggang",98);? // 插入部分字段內容
●?查看數(shù)據(jù)庫的記錄
select * from stu;? ? ?// 查詢 所有字段 的結果select name,score from stu;? ?// 查詢數(shù)據(jù)庫中 部分字段 的內容
●?刪除一條記錄
delete from stu where id = 18130101;
●?更改一條記錄
update stu set name = 'huangg' where id = 18130106;
●?刪除一張表
drop table stu;
●?增加一列
alter table stu add column sex char;
四,SQLite的編程操作
① C代碼打開/創(chuàng)建數(shù)據(jù)庫及錯誤提示
● 相關API及說明
sqlite3_open() |
sqlite3_open(const char *filename, sqlite3 **ppDb) ● 該例程打開一個指向 SQLite 數(shù)據(jù)庫文件的連接,返回一個用于其他 SQLite 程序的數(shù)據(jù)庫連接對象。 ● 如果?filename?參數(shù)是 NULL 或 ':memory:',那么 sqlite3_open() 將會在 RAM 中創(chuàng)建一個內存數(shù)據(jù)庫,這只會在 session 的有效時間內持續(xù)。 ● 如果文件名 filename 不為 NULL,那么 sqlite3_open() 將使用這個參數(shù)值嘗試打開數(shù)據(jù)庫文件。如果該名稱的文件不存在,sqlite3_open() 將創(chuàng)建一個新的命名為該名稱的數(shù)據(jù)庫文件并打開。 返回值:創(chuàng)建成功返回0 |
sqlite3_close() |
sqlite3_close(sqlite3*) ● 該例程關閉之前調用 sqlite3_open() 打開的數(shù)據(jù)庫連接。所有與連接相關的語句都應在連接關閉之前完成。 ● 如果還有查詢沒有完成,sqlite3_close() 將返回 SQLITE_BUSY 禁止關閉的錯誤消息。 |
sqlite3_errmsg() |
const char *sqlite3_errmsg(sqlite3*)
sqlite3_errcode
()
通常用來獲取最近調用的
API
接口返回的錯誤代碼
.
|
● 返回值和錯誤碼
● 代碼實現(xiàn)
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sqlite3.h>//數(shù)據(jù)庫頭文件
4
5 int main(int argc,char **argv)
6 {
7 int ret;
8 sqlite3 *db;//數(shù)據(jù)庫描述符,類似于文件描述符(原型**,定義*,傳參&)
9
10 if(argc < 2){
11 printf("Usage:%s xxx.db\n",argv[0]);//判斷參數(shù)
12 exit(-1);//參數(shù)格式不對就退出程序
13 }
14
15 ret = sqlite3_open(argv[1],&db);//打開或創(chuàng)建數(shù)據(jù)庫,ret接收返回值
16
17 if(ret == SQLITE_OK){ //SQLITE_OK為數(shù)據(jù)庫常用宏,表示數(shù)據(jù)庫程序正常,返回值0
18 printf("open %s success!\n",argv[1]);
19 }else{
20 printf("open %s error:%s,%d\n",argv[1],sqlite3_errmsg(db),ret);
21 //sqlite3_errmsg()接收數(shù)據(jù)庫創(chuàng)建失敗的錯誤信息,ret接收對應返回值
22 exit(-1); //數(shù)據(jù)庫創(chuàng)建失敗,那就退出程序
23 }
24
25 sqlite3_close(db); //正常關閉數(shù)據(jù)庫,保證程序正常運行
26 printf("done!\n");
27 return 0;
28 }
● 編譯及結果說明
② C代碼執(zhí)行SQL語句
● 相關API及說明
sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char? **errmsg);該例程提供了一個執(zhí)行 SQL 命令的快捷方式,SQL 命令由 sql 參數(shù)提供,可以由多個 SQL 命令組成。在這里,第一個參數(shù) sqlite3 是打開的數(shù)據(jù)庫對象,sqlite_callback 是一個回調,data 作為其第一 個參數(shù),errmsg 將被返回用來獲取程序生成的任何錯誤。
sqlite3_exec () 程序解析并執(zhí)行由 sql 參數(shù)所給的每個命令,直到字符串結束或者遇到錯誤為止。int sqlite3_exec( sqlite3*, /* 打開數(shù)據(jù)庫對象,可以理解為數(shù)據(jù)庫描述符*/ const char *sql, /* 執(zhí)行SQL的功能語句 */ int (*callback)(void*,int,char**,char**), /* sql對應的回調函數(shù) */ void *, /* 回調函數(shù)的第一個參數(shù) */ char **errmsg /* 錯誤信息 */ );
int callback(void *arg, int column_size, char *column_value[ ], char *column_name[ ]);該回調函數(shù)會先執(zhí)行*sql對應的功能命令,在將結果傳遞給回調函數(shù)int callback( void *arg, //是sqlite3_exec函數(shù)的第四個參數(shù)data int column_size, //數(shù)據(jù)庫的字段數(shù)量 char *column_value[], //列的值,就是字段名字對應的值 char*column_name[] //字段名字 );
● 代碼實現(xiàn)
1 #include <stdio.h>
2 #include <stdlib.h>
3 #include <sqlite3.h>//數(shù)據(jù)庫頭文件
4
5 int callback(void *arg, int column_size, char *column_value[], char*column_name[])
6 {
7 int i;
8 printf("arg=%s\n",(char *)arg);//sqlite3_exec()函數(shù)中第4個參數(shù)
9 printf("column_size = %d\n",column_size); //打印數(shù)據(jù)庫字段數(shù)
10 for(i=0;i<column_size;i++){
11 printf("%s = %s\n",column_name[i],column_value[i]);
12 //字段名字 //字段對應的值
13 }
14 printf("=================\n");
15 return 0;//必須返回0,這樣數(shù)據(jù)庫中有多少條數(shù)據(jù),這個回調函數(shù)就會被調用多少次
16 }
17
18 int main(int argc,char **argv)
19 {
20 int ret;
21 sqlite3 *db;//數(shù)據(jù)庫描述符,類似于文件描述符(原型**,定義*,傳參&)
22 char *errmsg = NULL;
23
24 if(argc < 2){
25 printf("Usage:%s xxx.db\n",argv[0]);//判斷參數(shù)
26 exit(-1);//參數(shù)格式不對就退出程序
27 }
28
29 ret = sqlite3_open(argv[1],&db);//打開或創(chuàng)建數(shù)據(jù)庫,ret接收返回值
30
31 if(ret == SQLITE_OK){ //SQLITE_OK為數(shù)據(jù)庫常用宏,表示數(shù)據(jù)庫程序正常
32 printf("open %s success!\n",argv[1]);
33 }else{
34 printf("open %s error:%s,%d\n",argv[1],sqlite3_errmsg(db),ret);
35 //sqlite3_errmsg()接收數(shù)據(jù)庫創(chuàng)建失敗的錯誤信息,ret接收對應返回值
36 // exit(-1); //數(shù)據(jù)庫創(chuàng)建失敗,那就退出程序
37 }
38
39 // sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
40 // 執(zhí)行sql的功能語句 回調函數(shù) 錯誤信息
41 sqlite3_exec(db,"select * from stu;",callback,"content of sql:",&errmsg);
42
43 sqlite3_close(db); //正常關閉數(shù)據(jù)庫,保證程序正常運行
44 printf("done!\n");
45 return 0;
46 }
● 編譯及結果說明
③ C代碼建表和插入數(shù)據(jù)
● 代碼說明
基于上面C代碼執(zhí)行sql語句的代碼示例,來建表和插入數(shù)據(jù),同樣用到sqlite3_exec()函數(shù),在該函數(shù)中插入需要插入的數(shù)據(jù)即可。
?
④ SELECT,UPDATE,DELETE
● SELECT操作(查找)
select操作格式:
● select * from stu;? ? ?// 查詢 所有字段 的結果● select name,score from stu;? ?// 查詢數(shù)據(jù)庫中 部分字段 的內容
1 #include <stdio.h>
2 #include <sqlite3.h>
3 #include <stdlib.h>
4 int callback(void *arg, int column_size, char *column_value[], char *column_name[])
5 {
6 int i;
7 printf("arg = %s\n",(char *)arg);
8 for(i=0;i<column_size;i++){
9 printf("%s = %s\n",column_name[i],column_value[i]);
10 }
11 printf("===================\n");
12 return 0;//必須返回0,這樣數(shù)據(jù)庫中有多少條數(shù)據(jù),這個回調函數(shù)就會被調用多少次
13 }
14 int main(int argc,char **argv)
15 {
16 int ret;
17 sqlite3 *db;
18 char *sql = NULL;
19 char *errmsg = NULL;
20
21 if(argc < 2){
22 printf("Usage:%s xxx.db\n",argv[0]);
23 exit(-1);
24 }
25
26 ret = sqlite3_open(argv[1],&db);
27 if(ret == SQLITE_OK){
28 printf("open %s success!\n",argv[1]);
29 }else{
30 printf("open %s error:%s;num = %d\n",argv[1],sqlite3_errmsg(db),ret);
31 exit(-1);
32 }
33
34 // sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
35 sql = "select * from stu";//select操作,查詢
36 ret = sqlite3_exec(db,sql,callback,"data from sql:",&errmsg);
37 printf("ret = %d,error:%s\n",ret,errmsg);
38 sqlite3_close(db); return 0;
39 }
?
● UPDATE操作(更改)
update指令格式:
● update stu set name = 'huangg' where id = 18130106;
1 #include <stdio.h>
2 #include <sqlite3.h>
3 #include <stdlib.h>
4 int callback(void *arg, int column_size, char *column_value[], char *column_name[])
5 {
6 int i;
7 printf("arg = %s\n",(char *)arg);
8 for(i=0;i<column_size;i++){
9 printf("%s = %s\n",column_name[i],column_value[i]);
10 }
11 printf("===================\n");
12 return 0;//必須返回0,這樣數(shù)據(jù)庫中有多少條數(shù)據(jù),這個回調函數(shù)就會被調用多少次
13 }
14 int main(int argc,char **argv)
15 {
16 int ret;
17 sqlite3 *db;
18 char *sql = NULL;
19 char *errmsg = NULL;
20
21 if(argc < 2){
22 printf("Usage:%s xxx.db\n",argv[0]);
23 exit(-1);
24 }
25
26 ret = sqlite3_open(argv[1],&db);
27 if(ret == SQLITE_OK){
28 printf("open %s success!\n",argv[1]);
29 }else{
30 printf("open %s error:%s;num = %d\n",argv[1],sqlite3_errmsg(db),ret);
31 exit(-1);
32 }
33
34 // sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
35
36 sql = "update stu set score = 99 where name = 'zhangsan'"; //更改zhangsan的成績,77改為99,
37 ret = sqlite3_exec(db,sql,callback,"data from sql:",&errmsg);
38 printf("ret = %d,error:%s\n",ret,errmsg);
39
40
41 sql = "select * from stu";//select操作,查詢更改后的數(shù)據(jù)
42 ret = sqlite3_exec(db,sql,callback,"data from sql:",&errmsg);
43 printf("ret = %d,error:%s\n",ret,errmsg);
44
45 sqlite3_close(db);
46 return 0;
47 }
●?DELETE操作(刪除)
delete操作格式:
● delete from stu where id = 18130101;
1 #include <stdio.h>
2 #include <sqlite3.h>
3 #include <stdlib.h>
4 int callback(void *arg, int column_size, char *column_value[], char *column_name[])
5 {
6 int i;
7 printf("arg = %s\n",(char *)arg);
8 for(i=0;i<column_size;i++){
9 printf("%s = %s\n",column_name[i],column_value[i]);
10 }
11 printf("===================\n");
12 return 0;//必須返回0,這樣數(shù)據(jù)庫中有多少條數(shù)據(jù),這個回調函數(shù)就會被調用多少次
13 }
14 int main(int argc,char **argv)
15 {
16 int ret;
17 sqlite3 *db;
18 char *sql = NULL;
19 char *errmsg = NULL;
20
21 if(argc < 2){
22 printf("Usage:%s xxx.db\n",argv[0]);
23 exit(-1);
24 }
25
26 ret = sqlite3_open(argv[1],&db);
27 if(ret == SQLITE_OK){
28 printf("open %s success!\n",argv[1]);
29 }else{
30 printf("open %s error:%s;num = %d\n",argv[1],sqlite3_errmsg(db),ret);
31 exit(-1);
32 }
33
34 // sqlite3_exec(sqlite3*, const char *sql, sqlite_callback, void *data, char **errmsg)
35 sql = "delete from stu where id = 3;";//delete操作,刪除一條數(shù)據(jù) 這里刪除學號為3學生的所有數(shù)據(jù)
36 ret = sqlite3_exec(db,sql,callback,"data from sql:",&errmsg);
37 printf("ret = %d,error:%s\n",ret,errmsg);
38
39 sql = "select * from stu";//select操作,查詢數(shù)據(jù)
40 ret = sqlite3_exec(db,sql,callback,"data from sql:",&errmsg);
41 printf("ret = %d,error:%s\n",ret,errmsg);
42
43 sqlite3_close(db);
44 return 0;
45 }
文章來源:http://www.zghlxwxcb.cn/news/detail-811606.html
?五,SQLite函數(shù)查詢網址
SQLite函數(shù)列表:https://www.sqlite.org/c3ref/funclist.html文章來源地址http://www.zghlxwxcb.cn/news/detail-811606.html
到了這里,關于嵌入式數(shù)據(jù)庫:SQLite3的安裝和使用說明的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!