數據庫簡介
數據庫是結構化數據的集合,用于高效存儲、檢索和管理數據。常見的數據庫類型包括關系型(如MySQL、SQLite)和非關系型(如MongoDB)。關系型數據庫使用表格形式存儲數據,并通過SQL(結構化查詢語言)操作。
SQLite3
SQLite3是輕量級、嵌入式的關系型數據庫,無需服務器,以文件形式存儲數據。適合嵌入式設備或小型應用。
C語言操作SQLite3示例
以下代碼演示如何用C語言創建SQLite3數據庫、表,并插入數據:
#include <sqlite3.h>
#include <stdio.h>int main() {sqlite3 *db;char *err_msg = 0;// 打開或創建數據庫int rc = sqlite3_open("test.db", &db);if (rc != SQLITE_OK) {fprintf(stderr, "無法打開數據庫: %s\n", sqlite3_errmsg(db));sqlite3_close(db);return 1;}// 創建表char *sql = "CREATE TABLE IF NOT EXISTS users(id INTEGER PRIMARY KEY, name TEXT);";rc = sqlite3_exec(db, sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL錯誤: %s\n", err_msg);sqlite3_free(err_msg);}// 插入數據sql = "INSERT INTO users(name) VALUES('Alice');""INSERT INTO users(name) VALUES('Bob');";rc = sqlite3_exec(db, sql, 0, 0, &err_msg);if (rc != SQLITE_OK) {fprintf(stderr, "SQL錯誤: %s\n", err_msg);sqlite3_free(err_msg);}sqlite3_close(db);return 0;
}
關鍵步驟說明
- 使用
sqlite3_open
打開或創建數據庫文件 - 通過
sqlite3_exec
執行SQL語句(如建表、插入數據) - 錯誤信息通過
sqlite3_errmsg
或err_msg
獲取 - 最后調用
sqlite3_close
關閉數據庫連接
編譯時需要鏈接SQLite3庫:
gcc program.c -lsqlite3 -o program
SQLite3以簡潔高效著稱,適合資源受限的環境。通過C語言接口可直接操作數據庫文件,無需額外服務進程。
作業:
1.數據庫實現案例
#include <myhead.h>int do_add(sqlite3 *dbfd)
{int id=0;char name[20]="";char sex[10]="";int age=0;printf("請輸入家人編號:");scanf("%d",&id);printf("請輸入姓名:");scanf("%s",name);printf("請輸入性別:");scanf("%s",sex);printf("請輸入年齡:");scanf("%d",&age);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"insert into family values(%d,\"%s\",\"%s\",%d);",id,name,sex,age);if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec insert error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("添加成功!!!\n");return 0;
}int do_delete(sqlite3 *dbfd)
{int id=0;printf("請輸入想要刪除的家人編號:");scanf("%d",&id);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"delete from family where id==%d;",id);if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec delete error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("刪除成功!!!\n");return 0;
}int do_update(sqlite3 *dbfd)
{int id=0;printf("請輸入想要刪除的家人編號:");scanf("%d",&id);getchar();char name[20]="";char sex[10]="";int age=0;printf("請輸入修改后的姓名:");scanf("%s",name);printf("請輸入修改后的性別:");scanf("%s",sex);printf("請輸入修改后的年齡:");scanf("%d",&age);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"update family set name=\"%s\",sex=\"%s\",age=%d where id==%d;",name,sex,age,id);if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec update error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("修改成功!!!\n");return 0;
}int show(void *flag,int num,char **data,char **head)
{if(*((int *)flag)==0){*((int *)flag)=1;for(int i=0;i<num;i++){printf("%s\t",head[i]);}putchar(10);}for(int i=0;i<num;i++){printf("%s\t",data[i]);}putchar(10);return 0;
}int do_show(sqlite3 *dbfd)
{int flag=0;char *sql="select * from family;";char *errmsg=NULL;if(sqlite3_exec(dbfd,sql,show,&flag,&errmsg)!=SQLITE_OK){printf("sqlite3_exec select error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("展示成功!!!\n");return 0;
}int do_select(sqlite3 *dbfd)
{int id=0;int flag=0;printf("請輸入想要查詢的家人編號:");scanf("%d",&id);getchar();char sql[128]="";char *errmsg=NULL;sprintf(sql,"select * from family where id==%d;",id);if(sqlite3_exec(dbfd,sql,show,&flag,&errmsg)!=SQLITE_OK){printf("sqlite3_exec select error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}printf("查詢成功!!!\n");return 0;
}int main(int argc, const char *argv[])
{//打開數據庫文件sqlite3 * dbfd=NULL;if(sqlite3_open("./mydb.db",&dbfd)!=SQLITE_OK){printf("sqlite3_open error:errno:%d,errmsg:%s",sqlite3_errcode(dbfd),sqlite3_errmsg(dbfd));return -1;}//創建數據表char *sql="create table if not exists family(id int,name text,sex char,age int);";char *errmsg=NULL;if(sqlite3_exec(dbfd,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("sqlite3_exec create error:%s\n",errmsg);sqlite3_free(errmsg);return -1;}while(1){system("clear");puts("***********************************");puts("***********家庭成員管理系統********");puts("***********1.添加家人信息**********");puts("***********2.刪除家人信息**********");puts("***********3.更改家人信息**********");puts("***********4.展示家人信息**********");puts("***********5.查詢家人信息**********");puts("***********0.退出程序**************");puts("***********************************");int a=0;scanf("%d",&a);getchar();switch(a){case 1:{do_add(dbfd);}break;case 2:{do_delete(dbfd);}break;case 3:{do_update(dbfd);}break;case 4:{do_show(dbfd);}break;case 5:{do_select(dbfd);}break;case 0:{sqlite3_close(dbfd);exit(EXIT_SUCCESS);}break;default:printf("錯誤輸入,請重新輸入\n");break;}printf("按下回車刷新界面\n");while(getchar()!='\n');}return 0;
}
運行結果:
2.牛客網: