網(wǎng)站建設(shè)優(yōu)化公司哪家好公司頁面設(shè)計(jì)
一:數(shù)據(jù)庫分類
常用的數(shù)據(jù)庫
大型數(shù)據(jù)庫 :Oracle商業(yè)、多平臺、關(guān)系型數(shù)據(jù)庫功能最強(qiáng)大、最復(fù)雜、市場占比最高的商業(yè)數(shù)據(jù)庫
中型數(shù)據(jù)庫 :Server是微軟開發(fā)的數(shù)據(jù)庫產(chǎn)品,主要支持windows平臺
小型數(shù)據(jù)庫 : mySQL是一個(gè)小型關(guān)系型數(shù)據(jù)庫管理系統(tǒng)。開放源碼、目前使用最廣泛、流行度最高的的開源數(shù)據(jù)庫SQLite基礎(chǔ)SQLite的源代碼是C,其源代碼完全開放。它是一個(gè)輕量級的嵌入式數(shù)據(jù)庫。SQLite有以下特性: 零配置————無需安裝和管理配置; 儲存在單一磁盤文件中的一個(gè)完整的數(shù)據(jù)庫; 數(shù)據(jù)庫文件可以在不同字節(jié)順序的機(jī)器間自由共享; 支持?jǐn)?shù)據(jù)庫大小至2TB(1024G = 1TB);足夠小,全部源碼大致3萬行c代碼,250KB; 比目前流行的大多數(shù)數(shù)據(jù)庫對數(shù)據(jù)的操作要快
二:源碼安裝與測試
tar xf sqlite-autoconf-3460000.tar.gz
cd sqlite-autoconf-3460000
./configure
make
sudo make install
測試:
sqlite3 -version
3.46.0 2024-05-23
三:基礎(chǔ)語句鏈接
【騰訊文檔】sqlite基礎(chǔ)SQL語句使用
sqlite基礎(chǔ)SQL語句使用
四:函數(shù)接口
文件:#include <sqlite3.h>
編譯:gcc sqlite1.c -lsqlite31.int sqlite3_open(char *path, sqlite3 **db);功能:打開sqlite數(shù)據(jù)庫,如果數(shù)據(jù)庫不存在則創(chuàng)建它
path: 數(shù)據(jù)庫文件路徑
db: 指向sqlite句柄的指針
返回值:成功返回SQLITE_OK,失敗返回錯(cuò)誤碼(非零值)2.int sqlite3_close(sqlite3 *db);功能:關(guān)閉sqlite數(shù)據(jù)庫
返回值:成功返回SQLITE_OK,失敗返回錯(cuò)誤碼返回值:返回錯(cuò)誤信息3.執(zhí)行sql語句接口
int sqlite3_exec(sqlite3 *db, /* An open database */const char *sql, /* SQL to be evaluated */int (*callback)(void*,int,char**,char**), /* Callback function */void *arg, /* 1st argument to callback */char **errmsg /* Error msg written here */
);功能:執(zhí)行SQL操作
db:數(shù)據(jù)庫句柄
sql:要執(zhí)行SQL語句
callback:回調(diào)函數(shù)(滿足一次條件,調(diào)用一次函數(shù),用于查詢)再調(diào)用查詢sql語句的時(shí)候使用回調(diào)函數(shù)打印查詢到的數(shù)據(jù)
arg:傳遞給回調(diào)函數(shù)的參數(shù)
errmsg:錯(cuò)誤信息指針的地址
返回值:成功返回SQLITE_OK,失敗返回錯(cuò)誤碼回調(diào)函數(shù):int (*sqlite3_callback)(void *para, int f_num, char **f_value, char **f_name);功能:select:每找到一條記錄自動執(zhí)行一次回調(diào)函數(shù)
para:傳遞給回調(diào)函數(shù)的參數(shù)(由 sqlite3_exec() 的第四個(gè)參數(shù)傳遞而來)
f_num:記錄中包含的字段數(shù)目
f_value:包含每個(gè)字段值的指針數(shù)組(列值)
f_name:包含每個(gè)字段名稱的指針數(shù)組(列名)
返回值:成功返回SQLITE_OK,失敗返回-1,每次回調(diào)必須返回0后才能繼續(xù)下次回調(diào)4.不使用回調(diào)函數(shù)執(zhí)行SQL語句(只用于查詢)
int sqlite3_get_table(sqlite3 *db, const char *sql, char ***resultp, int *nrow, int *ncolumn, char **errmsg);功能:執(zhí)行SQL操作
db:數(shù)據(jù)庫句柄
sql:SQL語句
resultp:用來指向sql執(zhí)行結(jié)果的指針
nrow:滿足條件的記錄的數(shù)目(但是不包含字段名(表頭 id name score))
ncolumn:每條記錄包含的字段數(shù)目
errmsg:錯(cuò)誤信息指針的地址返回值:成功返回SQLITE_OK,失敗返回錯(cuò)誤碼5.返回sqlite3定義的錯(cuò)誤信息
char *sqlite3_errmsg(sqlite3 *db);
五:函數(shù)編程
#include <stdio.h>
#include <sqlite3.h>
#include <errno.h>// int callback(void *arg, int f_num, char **f_val, char **f_name)
// {
// for (int i = 0; i < f_num; i++)
// {
// printf("%s\n", f_val[i]);
// }
// return 0;
// }int main(int argc, char const *argv[])
{sqlite3 *db;if (sqlite3_open("./stu.db", &db) != SQLITE_OK){fprintf(stderr, "sqlite3_open err%s\n", sqlite3_errmsg(db));return -1;}char *errmsg = NULL;// 創(chuàng)建表if (sqlite3_exec(db, "create table stu3(id int,name char,score float);", NULL, NULL, &errmsg) != SQLITE_OK){fprintf(stderr, "create table stu3 err:%s\n", errmsg);//return -1;//注釋之后追加}printf("sqlites ok\n");// 插入數(shù)據(jù),依次插入int num, id;char name[32];float score;char sql[128];printf("please input you num:");scanf("%d", &num);for (int i = 0; i < num; i++){scanf("%d %s %f", &id, name, &score);sprintf(sql, "insert into stu3 values(%d ,\"%s\" ,%f);", id, name, score);printf("%s\n", sql);if (sqlite3_exec(db, sql, NULL, NULL, &errmsg) != SQLITE_OK){fprintf(stderr, "create table stu3 err%s\n", errmsg);return -1;}}// 查詢// if (sqlite3_exec(db, "select id,score from stu3;", callback, "hello", &errmsg) != SQLITE_OK)// {// fprintf(stderr, "select err:%ss\n", errmsg);// return -1;// }char **result = NULL;int hang, lie, k = 0;if (sqlite3_get_table(db, "select id,score from stu3;", &result, &hang, &lie, &errmsg) != SQLITE_OK){fprintf(stderr, "select err:%ss\n", errmsg);return -1;}printf("hang%d:lie%d\n", hang, lie);for (int i = 0; i < hang + 1; i++){for (int i = 0; i < lie; i++)printf("%s\n", result[k++]);printf("\n");}sqlite3_close(db);return 0;
}
注釋:在數(shù)據(jù)庫編程中,最終的編譯階段需要鏈接他們的庫函數(shù)