# include <stdio.h> # include "sqlite3.h" # include <stdlib.h> int main(void) { int i; int j; sqlite3 *db;//建立一個sqlite3類型的指標db!可以當做資料庫的操作控制代碼。 //沒有這個控制代碼那麼所有的sqlite3函數都沒有任何實際意義 const char *SQL1="insert into sjk values(1,‘myd‘,‘2013-10-9‘);";//將SQL語句賦值在變數裡! const char *SQL2="insert into sjk values(2,‘myd‘,‘2013-10-9‘);";//SQL語句我就不多說了。 //從資料庫查詢資料 const char *SQL3="select * from sjk;";//這裡是重點我們在最下面可以看到回呼函數的用法! char *errmsg=0; char** pResult; int nRow; int nCol; int Feedback = sqlite3_open("sqlite3.db", &db); //開啟指定的資料庫檔案,如果不存在將建立一個同名的資料庫檔案,並返回給db控制代碼值。 if( Feedback != SQLITE_OK ) { printf("沒有開啟名為:sqlite3.db 的資料庫\n 原因是:%s\n", sqlite3_errmsg(db)); system("pause"); //sqlite3_errmsg()是返回錯誤後的提示資訊!參數是資料庫的操作控制代碼。 sqlite3_close(db); //sqlite3_close()是關閉指定資料庫控制代碼的資料庫! exit(-1);//非正常退出! } else printf("成功開啟或成功建立 名為:sqlite3.db !\n"); sqlite3_exec(db,"create table sjk(id integer,name text,birthday blob)",0,0,&errmsg);//建立表 sqlite3_exec(db,SQL1,0,0,&errmsg);//插入資料1 sqlite3_exec(db,SQL2,0,0,&errmsg);//插入資料2 printf("插入資料成功\n"); Feedback = sqlite3_get_table(db,SQL3,&pResult,&nRow,&nCol,&errmsg);//查詢資料將資料返回到&pResult int nIndex = nCol; //在這篇文章開始之前我就做過注釋解析,請查看,然後分析為什麼這麼做? printf("共有%d列/n",nIndex);//查出預設欄位數相當於列數 for(i=0;i<nRow;i++)//查詢第幾行的迴圈 { for(j=0;j<nCol;j++)//查詢一行裡面的資料迴圈 { printf("%s=%s\n",pResult[j],pResult[nIndex]); ++nIndex;//定位下一個資料,以便於欄位名符合! } } sqlite3_free_table(pResult);//釋放記憶體 sqlite3_close(db);//關閉資料庫 db = 0;//清除資料庫控制代碼 printf("資料庫關閉成功!\n"); system("pause");//暫停DOS以便於查看 return 0; } |