//插入一些记录
result = sqlite3_exec( db, “insert into MyTable_1( name ) values
( ‘走路’ )”, 0, 0, errmsg );
if(result != SQLITE_OK )
{
printf( “插入记录失败,错误码:%d,错误原因:%s/n”, result, errmsg );
}
result = sqlite3_exec( db, “insert into MyTable_1( name ) values
( ‘骑单车’ )”, 0, 0, errmsg );
if(result != SQLITE_OK )
{
printf( “插入记录失败,错误码:%d,错误原因:%s/n”, result, errmsg );
}
result = sqlite3_exec( db, “insert into MyTable_1( name ) values
( ‘坐汽车’ )”, 0, 0, errmsg );
if(result != SQLITE_OK )
{
printf( “插入记录失败,错误码:%d,错误原因:%s/n”, result, errmsg );
}
//开始查询数据库
result = sqlite3_exec( db, “select * from MyTable_1”, LoadMyInfo,
NULL, errmsg );
//关闭数据库
sqlite3_close( db );
return 0;
}
通过上面的例子,应该可以知道如何打开一个数据库,如何做数据库基本操作。
有这些知识,基本上可以应付很多数据库操作了。
i.3 不使用回调查询数据库
上面介绍的 sqlite3_exec 是使用回调来执行 select 操作。还有一个方法可以直接查询
而不需要回调。但是,我个人感觉还是回调好,因为代码可以更加整齐,只不过用回调很麻烦,
你得声明一个函数,如果这个函数是类成员函数,你还不得不把它声明成 static 的(要问为
什么?这又是 C++基础了。C++成员函数实际上隐藏了一个参数:this,C++调用类的成员函
数的时候,隐含把类指针当成函数的第一个参数传递进去。结果,这造成跟前面说的 sqlite
回调函数的参数不相符。只有当把成员函数声明成 static 时,它才没有多余的隐含的 this
参数)。
虽然回调显得代码整齐,但有时候你还是想要非回调的 select 查询。这可以通过
sqlite3_get_table 函数做到。
int sqlite3_get_table(sqlite3*, const char *sql, char ***resultp, int
*nrow, int *ncolumn, char **errmsg );
第 1 个参数不再多说,看前面的例子。
第 2 个参数是 sql 语句,跟 sqlite3_exec 里的 sql 是一样的。是一个很普通的以/0 结
尾的 char *字符串。
第 3 个参数是查询结果,它依然一维数组(不要以为是二维数组,更不要以为是三维数组)。
5