#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("delete.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 delete.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("zErrMsg=%s\n",zErrMsg);
#endif
//插入数据
sql="INSERT INTO\"SensorData\"VALUES(NULL,11,12,'北京',1);";//向要表中输入内容
sqlite3_exec(db,sql,0,0,&zErrMsg);
sql="INSERT INTO\"SensorData\"VALUES(NULL,13,14,'上海',2);";
sqlite3_exec(db,sql,0,0,&zErrMsg);
sql="INSERT INTO\"SensorData\"VALUES(NULL,15,16,'广州',3);";
sqlite3_exec(db,sql,0,0,&zErrMsg);
sql="INSERT INTO\"SensorData\"VALUES(NULL,15,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 deleteing is:\n");
//输出查询的数据
for(i=0;i<(row+1)*column;i++)
printf("result[%d]=%s\n",i,result[i]);
//删除数据
sql="DELETE FROM SensorData WHERE SensorID=11";//把北京所对应的那一行数据删除掉
sqlite3_exec(db,sql,0,0,&zErrMsg);
#ifdef _DEBUG_
printf("zErrMsg=%s\n",zErrMsg);
#endif
//输出删除后的数据
sql="SELECT * FROM SensorData";
sqlite3_get_table(db,sql,&result,&row,&column,&zErrMsg);
printf("\n\n\nrow:%d column:%d\n",row,column);
printf("\nAfter deleting,the result of deleting 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 delete -l sqlite3 delete.c
运行可执行文件:
root@cky-desktop:/home/src# sudo ./delete
You have opened a sqlite3 database named delete.db successfully!
Congratulation! Have fun!
table SensorData already exists
zErrMsg=(null)
row:4 column:5
The result of deleteing is:
result[0]=ID
result[1]=SensorID
result[2]=SiteNum
result[3]=name
result[4]=Sensorparamter
result[5]=1
result[6]=11
result[7]=12
result[8]=北京
result[9]=1.0
result[10]=2
result[11]=13
result[12]=14
result[13]=上海
result[14]=2.0
result[15]=3
result[16]=15
result[17]=16
result[18]=广州
result[19]=3.0
result[20]=4
result[21]=15
result[22]=16
result[23]=深圳
result[24]=4.0
zErrMsg=(null)
row:3 column:5
After deleting,the result of deleting is:
result[0]=ID
result[1]=SensorID
result[2]=SiteNum
result[3]=name
result[4]=Sensorparamter
result[5]=2
result[6]=13
result[7]=14
result[8]=上海
result[9]=2.0
result[10]=3
result[11]=15
result[12]=16
result[13]=广州
result[14]=3.0
result[15]=4
result[16]=15
result[17]=16
result[18]=深圳
result[19]=4.0
zErrMsg=(null)
![](https://img2024.cnblogs.com/blog/35695/202408/35695-20240826070647288-243310440.jpg)