數據庫相關函數
數據庫創建
int sqlite3_open( const char *filename,? sqlite3 **ppDb);
功能:打開數據庫,不存在則創建
參數:const char *filename? ? ? ? 數據庫名
? ? ? ? ? ?sqlite3 **ppDb? ? ? ? ? ? ? ? ?二級指針,傳出ppDb數據庫的一級指針
返回值:成功返回SQLITE_OK 失敗返回錯誤碼 sqlite_errmsg()來獲取錯誤信息
關閉數據庫和錯誤信息
int sqlite3_close(sqlite3* ppDb) & const char * sqlite3_errmsg(sqlite3* ppDb)
int sqlite3_errcode(sqlite3 *db)
功能:關閉數據庫?? ? ? ? ? ? ? ? ? 參數返回值參上
功能:返回錯誤信息? ? ? ? ? ? ? ?返回值為錯誤信息字符串
功能:返回錯誤碼? ? ? ? ? ? ? ? ? ?返回錯誤碼
操作數據表
int sqlite3_exec(sqlite3 *ppDb,const char *sql
,int (*callback)(void*,int,char**,char**),void*,char**errmsg)
功能:實現sql指令
參數:
sqlite3 *ppDb 數據庫 ?const char *sql? sql指令 int (*callback)(void*,int,char**,char**)? 結果輸出函數 void* 傳入輸出函數的參數 char**errmsg 錯誤信息 int (*callback)(void*,int,char**,char**)?
void *arg 外部傳入參數 int cols 列數 char** msg_text 數據文本 char** msg_header 表頭 要輸出結果用結果輸出函數,無需填NULL
返回值:參上
代碼實現增刪改查
#include <stdio.h>
#include <25061head.h>
int table_add(sqlite3 *pdb)
{int num;char name[18];char sex[10];double score;printf("請輸入學號 姓名 性別 成績\n");scanf(" %d %s %s %lf",&num,name,sex,&score);//添加信息char sql[128]="";sprintf(sql,"insert into stuinfo values(%d,\"%s\",\"%s\",%.2lf);",\num,name,sex,score);char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("添加信息失敗 %s \n",errmsg);sqlite3_free(errmsg);return -1; }printf("添加信息成功\n");return 0;}
int table_delete(sqlite3 *pdb)
{int delete_num;printf("請輸入刪除信息的學號\n");scanf("%d",&delete_num);getchar(); char sql[128]="";sprintf(sql,"delete from stuinfo where num=%d",delete_num);char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("刪除信息失敗 %s \n",errmsg);sqlite3_free(errmsg);return -1; }printf("信息刪除成功\n");return 0;
}
int table_updata(sqlite3 *pdb)
{int updata_num;char updata_msg[32]="";printf("請輸入要更新信息的學號\n");scanf("%d",&updata_num);getchar();printf("請輸入要更新的信息 eg: score=90 name='ttt'\n");scanf("%s",updata_msg);//updata_msg[strlen(updata_msg)+1]=' ';getchar();char sql[128]="";//printf("num=%d\n",updata_num);sprintf(sql,"update stuinfo set %s where num=%d",updata_msg,updata_num);//printf("%s\n",sql);char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("更新信息失敗 %s \n",errmsg);sqlite3_free(errmsg);return -1; }printf("更新信息成功\n");return 0;
}
int callback(void *arg,int cols,char** msg_text,char** msg_header)
{if(*(int *)arg==0){*(int *)arg=1;for(int i=0;i<cols;i++){printf("%s\t",*(msg_header+i));}putchar(10);}for(int j=0;j<cols;j++){ printf("%s\t",*(msg_text+j));}putchar(10);return 0;
}
int table_select(sqlite3 *pdb)
{char sql[128]="";sprintf(sql,"select * from stuinfo");char *errmsg=NULL;int arg=0;if(sqlite3_exec(pdb,sql,callback,&arg,&errmsg)!=SQLITE_OK){printf("展示信息失敗\n");sqlite3_free(errmsg);return -1;}
}
int main(int argc, const char *argv[])
{ //創建數據庫sqlite3 *pdb=NULL;int ret=sqlite3_open("./my.db",&pdb);if(ret!=0){printf("sqlite3_open error errcode=%d errmsg=%s\n",\sqlite3_errcode(pdb),sqlite3_errmsg(pdb));return -1;}//創建數據表char *sql="create table if not exists stuinfo \(num int,name text,sex char,score double);"; char *errmsg=NULL;if(sqlite3_exec(pdb,sql,NULL,NULL,&errmsg)!=SQLITE_OK){printf("創建數據表失敗 %s \n",errmsg);sqlite3_free(errmsg);return -1; }printf("數據表創建成功\n");int i;while(1){ printf("1.添加信息\n");printf("2.刪除信息\n");printf("3.修改信息\n");printf("4.展示信息\n");printf("輸入\n");scanf("%d",&i);getchar();switch(i){case 1: table_add(pdb);break;case 2: table_delete(pdb);break;case 3: table_updata(pdb);break;case 4: table_select(pdb);break;case 0:exit(0);default: printf("輸入錯誤 重新輸入\n");}}return 0;
}