从数据库sqlite3读取数据

#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

    原文作者:sqlite
    原文地址: https://www.cnblogs.com/love-lie/archive/2012/04/09/2438839.html
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞