#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("query.db", &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.db successfully!\nCongratulation! Have fun!\n");
//創建一個表
char *sql = "CREATE TABLE SensorData(ID INTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,name VARCHAR(12),Sensorparamter REAL);";
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="INSERT INTO\"SensorData\"VALUES(NULL,1,1,'200708081010',16.4);";
sqlite3_exec(db,sql,0,0,&zErrMsg);
int row=0,column=0;//用於記錄下面結果集中的行數和列數
char **result;//二維數組用於存放結果
//查詢數據
sql="select * from SensorData";//查詢語句,其在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;
}
注:
sqlite3_exec的函數原型說明如下:
int sqlite3_exec(
sqlite3*, //An open database
const char *sql,//SQL to be executed
sqlite_callback,//Callback function
void *,//Lst argument to callback function
char **ermsg// Error msg written here
);
sqlite3_get_table的函數原型如下:
int sqlite3_get_table(sqlite3 *,const char *sql,char ***result,int *nrow,int *ncolumn,char **errmsg);
//result:以數組的形式存放所要查詢的數據,首先是表名,然后才是數據;nrow和ncolumn分別用於記錄查詢語句返回的結果的行數和列數,沒有查到結果是返回0
編譯:
root@cky-desktop:/home/src# gcc -o query -l sqlite3 query.c
運行可執行文件:
root@cky-desktop:/home/src# sudo ./query
You have opened a sqlite3 database named query.db successfully!
Congratulation! Have fun!
table SensorData already exists
row:2 column:5
The result of querying is:
result[0]=ID
result[1]=SensorID
result[2]=SiteNum
result[3]=name
result[4]=Sensorparamter
result[5]=1
result[6]=1
result[7]=1
result[8]=200708081008
result[9]=18.9
result[10]=2
result[11]=1
result[12]=1
result[13]=200708081010
result[14]=16.4
zErrMsg=(null)
查看插入的數據:
root@cky-desktop:/home/src# sqlite3 query.db
SQLite version 3.3.13
Enter ".help" for instructions
sqlite> select * from SensorData;
1|1|1|200708081008|18.9
2|1|1|200708081010|16.4
char *zErrMsg = 0;
int rc;
//打開或創建一個數據庫文件
rc = sqlite3_open("query.db", &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.db successfully!\nCongratulation! Have fun!\n");
//創建一個表
char *sql = "CREATE TABLE SensorData(ID INTEGER PRIMARY KEY,SensorID INTEGER,SiteNum INTEGER,name VARCHAR(12),Sensorparamter REAL);";
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="INSERT INTO\"SensorData\"VALUES(NULL,1,1,'200708081010',16.4);";
sqlite3_exec(db,sql,0,0,&zErrMsg);
int row=0,column=0;//用於記錄下面結果集中的行數和列數
char **result;//二維數組用於存放結果
//查詢數據
sql="select * from SensorData";//查詢語句,其在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;
}
注:
sqlite3_exec的函數原型說明如下:
int sqlite3_exec(
sqlite3*, //An open database
const char *sql,//SQL to be executed
sqlite_callback,//Callback function
void *,//Lst argument to callback function
char **ermsg// Error msg written here
);
sqlite3_get_table的函數原型如下:
int sqlite3_get_table(sqlite3 *,const char *sql,char ***result,int *nrow,int *ncolumn,char **errmsg);
//result:以數組的形式存放所要查詢的數據,首先是表名,然后才是數據;nrow和ncolumn分別用於記錄查詢語句返回的結果的行數和列數,沒有查到結果是返回0
編譯:
root@cky-desktop:/home/src# gcc -o query -l sqlite3 query.c
運行可執行文件:
root@cky-desktop:/home/src# sudo ./query
You have opened a sqlite3 database named query.db successfully!
Congratulation! Have fun!
table SensorData already exists
row:2 column:5
The result of querying is:
result[0]=ID
result[1]=SensorID
result[2]=SiteNum
result[3]=name
result[4]=Sensorparamter
result[5]=1
result[6]=1
result[7]=1
result[8]=200708081008
result[9]=18.9
result[10]=2
result[11]=1
result[12]=1
result[13]=200708081010
result[14]=16.4
zErrMsg=(null)
查看插入的數據:
root@cky-desktop:/home/src# sqlite3 query.db
SQLite version 3.3.13
Enter ".help" for instructions
sqlite> select * from SensorData;
1|1|1|200708081008|18.9
2|1|1|200708081010|16.4