SQLite,是一款輕型的資料庫,是遵守ACID的關聯式資料庫管理系統,它的設計目標是嵌入式的,而且目前已經在很多嵌入式產品中使用了它,它佔用資源非常的低,在嵌入式裝置中,可能只需要幾百K的記憶體就夠了。它能夠支援Windows/Linux/Unix等等主流的作業系統,同時能夠跟很多程式語言相結合,比如
Tcl、C#、PHP、Java等,還有ODBC介面,同樣比起Mysql、PostgreSQL這兩款開源世界著名的資料庫管理系統來講,它的處理速度比他們都快。
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
#define _DEBUG_
int main(void)
{
sqlite3 *db=NULL;//聲明sqlite關鍵結構指標
char *zErrMsg = 0;
int rc;
rc = sqlite3_open("/home/xue/db/Person",&db); //終端到該目錄,shell建表
if(rc!=SQLITE_OK){
fprintf(stderr,"Can't open database:%s\n",sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);
}
else printf(" successfully!\nCongratulation! Have fun!\n");
int row=1,column=1;
char **result;
char *sql="select * from Per";
sqlite3_get_table(db,sql,&result,&row,&column,&zErrMsg);
int i=0;
printf("row:%d column:%d\n",row,column);
printf("\nThe result of querying is:\n");
//輸出查詢的資料
for(i=0;i<(row+1)*column;i++)
printf("result[%d]=%s\n",i,result[i]);
sqlite3_free_table(result);//釋放result的記憶體空間
#ifdef _DEBUG_ //如果前面已經定義了_DEBUG_ ,則輸出所建立的表存在的資訊
printf("zErrMsg=%s\n",zErrMsg);//保留錯誤資訊,如為空白(null),表明在執行過程中沒有錯誤資訊
#endif
sqlite3_close(db); //關閉資料庫
return 0;
}
//以上為已調試通過的代碼;
#include <stdio.h>
#include <sqlite3.h>
#include <stdlib.h>
#define _DEBUG_
int main(void)
{
sqlite3 *db=NULL;//聲明sqlite關鍵結構指標
char *zErrMsg = 0;
int rc;
//開啟或建立一個資料庫檔案
rc = sqlite3_open("Person",&db); //開啟指定的資料庫檔案,如果不存在,將建立一個同名的資料庫檔案,需要傳入db這個指標的指標,因為sqlite3_open函數要為這,個指標分配記憶體,好要讓db指標指向這個記憶體區
if(rc!=SQLITE_OK){//或者直接是rc
fprintf(stderr,"Can't open database: %s\n",sqlite3_errmsg(db));
sqlite3_close(db);
exit(1);//開啟失敗,退出
}
else printf("You have opened a sqlite3 database named query.dbsuccessfully!\nCongratulation! Have fun!\n");
/*//建立一個表
char *sql = "CREATE TABLE SensorData(ID INTEGER PRIMARYKEY,SensorID INTEGER,SiteNum INTEGER,name VARCHAR(12),SensorparamterREAL);";
sqlite3_exec(db,sql,0,0,&zErrMsg);
#ifdef _DEBUG_ //如果前面已經定義了_DEBUG_ ,則輸出所建立的表存在的資訊
printf("%s\n",zErrMsg);
#endif
//插入資料
sql="INSERT INTO\"SensorData\"VALUES(NULL,1,1,'200708081008',18.9);";//向要表中輸入內容
sqlite3_exec(db,sql,0,0,&zErrMsg);
sql="INSERTINTO\"SensorData\"VALUES(NULL,1,1,'200708081010',16.4);";
sqlite3_exec(db,sql,0,0,&zErrMsg);*/
int row=0,column=0;//用於記錄下面結果集中的行數和列數
char **result;//二維數組用於存放結果
//查詢資料
char *sql="select * from Per";//查詢語句,其在C語言中對應的函數介面是sqlite3_get_table(db,sql,&result,&row,&column,&zErrMsg)
sqlite3_get_table(db,sql,&result,&row,&column,&zErrMsg);//result:以數組的形式存放所要查詢的資料,首先是表名,然後才是資料
int i=0;
printf("row:%d column:%d\n",row,column);
printf("\nThe result of querying is:\n");
//輸出查詢的資料
for(i=0;i<(row+1)*column;i++)
printf("result[%d]=%s\n",i,result[i]);
sqlite3_free_table(result);//釋放result的記憶體空間
#ifdef _DEBUG_ //如果前面已經定義了_DEBUG_ ,則輸出所建立的表存在的資訊
printf("zErrMsg=%s\n",zErrMsg);//保留錯誤資訊,如為空白(null),表明在執行過程中沒有錯誤資訊
#endif
sqlite3_close(db); //關閉資料庫
return 0;
}