一、创建并打开数据库

int sqlite3_open(string,sqlite3**)

String标识你要打开的数据库文件路径(例:C://my.db),如果文件不存在,则会创建一个。

Sqlite3**为关键数据结构,数据库打开后,此变量就代表了你要操作的数据库。

返回值标识操作是否正确,例:SQLITE_OK。具体值见sqlite3.h的解释,很详细。

二、关闭数据库

如果你打开了数据库,不要忘了关闭它。

int dqlite3_close(sqlite3*)

以上两点实现过程:

//声明sqlite关键结构指针
sqlite3* db=NULL;
int
//打开数据库,传入db指针的指针,因为open函数要为db指针分配内存,还要让db指针的指针指向这片内存区域
resulte=sqlite3_open("my",&db);
if(resulte!=SQLITE_OK){}
else{}
//关闭数据库
sqlite3_close(db);
三、SQL语句操作
int sqlite3_exec(sqlite3*,  const char*sql,  sqlite3_callback,  void*,  char**ermsg)

参数一关键数据结构

参数二 sql语句,以‘\0’结尾

参数三回调,当这条语句执行后,sqlite3会去调用你提供的这个函数

参数四 void*是你提供的指针,这个参数会最终传到回调函数中去,如果你不需要传地指针给回调函数,可以填NULL。

参数五错误信息。这是指针的指针。可以直接cout<<errmsg得到错误信息。

在进行insert和delete等操作时,通常将cllback和void设置为NULL,即不需要回调。

但是做select时必须使用回调函数,从而获得查询结果。

四、回调函数

typedef int (*sqlite3_callback)(void*, int, char**, char**);

回调函数必须定义成上面的类型。

下面给出简单的例子:

int LoadMyInfo(void* para, int n_column, char** column_value, char** column_name)

参数一用不着,不管

参数二此记录有多少列

参数三一维数组,查出的结果都在此数组中存放。

参数四与column_value对应值所在的列的列名

以上两点实现过程:

回调函数定义:

int LoadMyInfo(void* para,int n_column,char **column_value,char** column_name)
{
"本条记录的列数:"<<n_column<<endl;
for(int
     {
"字段名:"<<column_name[i]<<"字段值:"<<column_value[i]<<endl;
     }
return
}
Main函数中创建表和执行插入语句:
resulte=sqlite3_exec(db,"create table MyTable_1(ID integer primary key autoincrement,name nvarchar(32))",NULL,NULL,&errmsg);
if(resulte!=SQLITE_OK)
"创建失败:"<<resulte<<"   "<<errmsg<<endl;
else
{
"insert into MyTable_1(name)values('王')",NULL,NULL,&errmsg);
if(resulte!=SQLITE_OK)
"插入失败:"<<resulte<<"   "<<errmsg<<endl;
"insert into MyTable_1(name)values('张')",NULL,NULL,&errmsg);
if(resulte!=SQLITE_OK)
"插入失败:"<<resulte<<"   "<<errmsg<<endl;
//查询
//每查询到一条记录就会执行一次回调函数
"select* from MyTable_1",LoadMyInfo,NULL,&errmsg);
}
五、非回调函数的查询语句
int sqlite3_get_table(sqlite3*,const char *sql, char*** resultp, int *nrow, int *ncolumn, char **errmsg);
参数一关键数据结构
参数二 SQL语句
参数三查询结果,依然是一维数组。内部布局是:第一行是字段名称,后面是紧接着的每个字段的值。
参数四多少行
参数五多少列
参数六错误信息
dbReulte的字段值是连续的,从0到nColumn-1都是字段名称,从第nColumn开始都是字段值。
还有,最后不管查询结果如何,都必须释放dbResutlte。
sqlite3* db=NULL;
int
char* errmsg=NULL;
char** dbResulte;
int
int
int
//打开数据库,传入db指针的指针,因为open函数要为db指针分配内存,还要让db指针的指针指向这片内存区域
resulte=sqlite3_open("my.db",&db);
if(resulte!=SQLITE_OK)
{
"打开数据库失败!"<<endl;
}
else
{
"成功创建并打开数据库!"<<endl;
"select *from MyTable_1",&dbResulte,&nRow,&nColumn,&errmsg);
if(resulte==SQLITE_OK)
      {
           index=nColumn;
"记录总数:"<<nRow<<endl;
for(int
           {
"第"<<i<<"条记录:";
for(int
               {
" 字段名:"<<dbResulte[j]<<" 字段值:"<<dbResulte[index];
                    index++;
               }
               cout<<endl;
           }
      }
}
sqlite3_free_table(dbResulte);
//关闭数据库
sqlite3_close(db);
int LoadMyInfo(void* para,int n_column,char **column_value,char** column_name)
{
"本条记录的列数:"<<n_column<<endl;
for(int
     {
"字段名:"<<column_name[i]<<"字段值:"<<column_value[i]<<endl;
     }
return
}
Main函数中创建表和执行插入语句:
resulte=sqlite3_exec(db,"create table MyTable_1(ID integer primary key autoincrement,name nvarchar(32))",NULL,NULL,&errmsg);
if(resulte!=SQLITE_OK)
"创建失败:"<<resulte<<"   "<<errmsg<<endl;
else
{
"insert into MyTable_1(name)values('王')",NULL,NULL,&errmsg);
if(resulte!=SQLITE_OK)
"插入失败:"<<resulte<<"   "<<errmsg<<endl;
"insert into MyTable_1(name)values('张')",NULL,NULL,&errmsg);
if(resulte!=SQLITE_OK)
"插入失败:"<<resulte<<"   "<<errmsg<<endl;
//查询
//每查询到一条记录就会执行一次回调函数
"select* from MyTable_1",LoadMyInfo,NULL,&errmsg);
}
五、非回调函数的查询语句
int sqlite3_get_table(sqlite3*,const char *sql, char*** resultp, int *nrow, int *ncolumn, char **errmsg);
参数一关键数据结构
参数二 SQL语句
参数三查询结果,依然是一维数组。内部布局是:第一行是字段名称,后面是紧接着的每个字段的值。
参数四多少行
参数五多少列
参数六错误信息
dbReulte的字段值是连续的,从0到nColumn-1都是字段名称,从第nColumn开始都是字段值。
还有,最后不管查询结果如何,都必须释放dbResutlte。
sqlite3* db=NULL;
int
char* errmsg=NULL;
char** dbResulte;
int
int
int
//打开数据库,传入db指针的指针,因为open函数要为db指针分配内存,还要让db指针的指针指向这片内存区域
resulte=sqlite3_open("my.db",&db);
if(resulte!=SQLITE_OK)
{
"打开数据库失败!"<<endl;
}
else
{
"成功创建并打开数据库!"<<endl;
"select *from MyTable_1",&dbResulte,&nRow,&nColumn,&errmsg);
if(resulte==SQLITE_OK)
      {
           index=nColumn;
"记录总数:"<<nRow<<endl;
for(int
           {
"第"<<i<<"条记录:";
for(int
               {
" 字段名:"<<dbResulte[j]<<" 字段值:"<<dbResulte[index];
                    index++;
               }
               cout<<endl;
           }
      }
}
sqlite3_free_table(dbResulte);
//关闭数据库
sqlite3_close(db);

暂时用到这么多,先写到这!

这篇文章主要参考了互联网上的一篇学习笔记,原文地址找不到了,从百度文库下的,在这里感谢一下原文作者董淳光!