wordpress 當前分類名稱我們seo
數據庫
數據庫是在數據庫管理系統(tǒng)和控制之下,存放在存儲 介質上的數據集合。
基于嵌入式的數據庫
基于嵌入式linux的數據庫主要有SQlite,
Firebird,Berkeley DB,eXtremeDB
????????Firebird是關系型數據庫,功能強大,支持存儲過 程,SQL兼容等
????????SQlite關系型數據庫體積小,支持ACID事務
????????Berkeley DB中并沒有數據庫服務器的概念,它的程 序直接鏈接到應用程序中
????????eXtremeDB是內存數據庫,運行效率高
SQlite基礎
SQLite的源碼是C語言,其源代碼完全開發(fā),SQLite
第一個Alpha版本誕生于2000年5月,他是一個輕量 級的嵌入式數據庫。
SQLite有以下特性 零配置,無需安裝和管理配置 存儲在單一磁盤文件中的一個完整的數據庫 數據庫文件可以在不同字節(jié)順序的機器間自由共享支持數據庫大小至2TB
足夠小,全部源碼大致三萬行C代碼,250KB
比目前留下的大多數數據庫對數據的操作更快
創(chuàng)建數據庫
1.在線安裝
sudo apt-get install sqlite3
2.本地安裝
官網下載sqlite3,然后本地安裝:sudo dpkg -i *.deb
3.SQlite3 基本命令
1.系統(tǒng)命令 以 . 開頭的命令
????????.help 幫助
????????.quit 退出
????????.schema查看表結構
????????.databases 查看打開的數據庫
????????.table?
2.sql命令
基本的sql命令,不以 . 開頭,但是都要 ; 結尾
創(chuàng)建一張數據庫的表
????????stucreate table stu(id Integer,name char,score Integer);
插入一張記錄
????????insert into stu values(1001,'zhangsan',80);
插入部分字段記錄
????????insert into stu(name,score) values(1002,'lisi');
查詢所有記錄
????????select *from stu
查詢數據庫部分內容字段
????????select name,score from stu
根據屬性查詢
????????select * from stu where score=80; select *from stu where score=80 and name='zhangsan';
刪除一條記錄
????????delede from stu where id=1003; delete from stu where socre='90';
更新一條記錄
????????update stu set name='wangwu' where id=1001; update stu set name='wangwu',score=88 where id = 1001;
添加一列
????????alter table stu add column address char;
刪除一列
1.創(chuàng)建一張表 提取字段
create table stu1 as select id,name,score from stu;
2.刪除原有表
drop table stu;
3.將新的表的名字改成原有的表名字
alter table stu1 rename to stu;
SQlite編程接口
4.API操作
1.int sqlite3_open(char *filename,sqlite3 **db)
????????功能:打開sqlite數據庫 參數:
????????filename:數據庫文件路徑
????????db:指向sqlite句柄的指針
返回值:
????????成功返回0,失敗返回錯誤碼(非0值)
2.int sqlite3_close(sqlite3 *db);
????????功能:關閉sqlite數據庫 參數:
????????db 操作數據庫的指針
返回值:
?????????????? 成功返回0,失敗返回錯誤碼
3.const char *sqlite3_errmsg(sqlite3 *db);
????????功能:通過DB句柄得到數據庫操作的錯誤信息
參數:
????????db 操作數據庫的指針 ??????
????????返回值: 返回錯誤信息的首地址
4.int sqlite3_exec(const char *sql, int (*callback)(void *,int,char**,char *8) void *, char **errmsg);
????????功能:執(zhí)行一條sql語句
參數
????????db:數據庫操作句柄
????????sql:一條sql語句
????????sqlite3*db,
????????callback:回調函數,只有sql為查詢語句的時候, 才會執(zhí)行此語句
????????void * :給回調函數傳遞參數
????????errmsg:錯誤信息
返回值:
????????成功:SQLITE_OK
int (*callback)(void *,int,char**,char *8)
????????功能:查詢結果,是一個函數指針類型,傳遞一個函數名
回調函數接口:
typedef int(*sqlite3_callback)( void *para, int f_num, char ** f_value, char ** f_name)
????????功能: 每找到一條記錄自動執(zhí)行一次回調函數
????????para:傳遞給回調函數的參數
????????f_num:記錄中包含的字段數目
????????f_value:包含每個字段值的指針數組
????????f_name:包含每個字段名稱的指針數組
返回值,
????????成功返回0,失敗返回-1
不使用回調函數執(zhí)行SQL語句
int sqlite3_get_table( sqlite3 *db, const char *sql, char ***resultp,int *nrow, int *ncolumu,char **errmsg)
????????功能:執(zhí)行sql操作
????????db:數據庫句柄
????????sql:sql語句
????????resultp:用來指向sql執(zhí)行結果的指針
????????nrow:滿足條件的記錄的數目
????????ncolumn:每條記錄包含的字段數目
????????errmsg:錯誤信息指針的地址
返回值:
????????成功返回0,失敗返回錯誤碼
#include <stdio.h>
#include <stdlib.h>
#include <sqlite3.h> // sqlite3_callback 類型的回調函數
int callback(void *NotUsed, int argc, char **argv, char **azColName){ int i; for(i = 0; i<argc; i++){ printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL"); } printf("\n"); return 0;
} int main() { sqlite3 *db; char *err_msg = 0; int rc; char **result; int row, column; // 打開數據庫 rc = sqlite3_open("test.db", &db); if (rc) { fprintf(stderr, "無法打開數據庫: %s\n", sqlite3_errmsg(db)); return 1; } // 使用 sqlite3_exec 和回調函數 rc = sqlite3_exec(db, "SELECT * FROM my_table", callback, 0, &err_msg); if (rc != SQLITE_OK ){ fprintf(stderr, "SQL錯誤: %s\n", err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; } // 使用 sqlite3_get_table 獲取結果 rc = sqlite3_get_table(db, "SELECT * FROM my_table", &result, &row, &column, &err_msg); if (rc != SQLITE_OK) { fprintf(stderr, "SQL錯誤: %s\n", err_msg); sqlite3_free(err_msg); sqlite3_close(db); return 1; } // 輸出 sqlite3_get_table 的結果 printf("sqlite3_get_table 結果:\n"); for (int i = 0; i < row + 1; i++) { for (int j = 0; j < column; j++) { printf("%s ", result[i*column + j] ? result[i*column + j] : "NULL"); } printf("\n"); } // 釋放結果 sqlite3_free_table(result); // 關閉數據庫 sqlite3_close(db); return 0;
}