# 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; }
|