callback函数
sqlite3* db;
int rc;
char* zErr;
rc = sqlite3_open("test.db,&db);
if(rc) cout<<"ERROR"<<endl;
char * data = "CallBack";
char * sql = "select * from test";
rc = sqlite3_exec( db,sql,callback,data,&zErr );
if( rc != sqlITE_OK) cout<<"ERROR"<<endl;
sqlite3_close(db);
int callback(void* data,int ncols,char**values,char** headers)
{
for( int i=0; i<ncols; i++)
cout << headers[i] <<" --> "<< values[i] <<endl;
}
对sqlite3_exec执行结果中查询到的每条记录应用callback函数
每条记录的相应字段值存放于values数组,表头存放于headers数组,可以完成相应数据处理
char ** result;
int nrows,ncols;
char * zErr;
char * sql = "select * from test;";
int rc = sqlite3_get_table( db,&result,&nrows,&ncols,&zErr );
cout<<"行数: "<< nrows<<endl;
cout<<"列数: "<< ncols<<endl;
for( int i = 0; i <= nrows; i++ )
{
for( int j = 0; j < ncols; j++ )
cout<< result[i*ncols+j] <<"\t";
cout<<endl;
}
sqlite3_free_table(result);
sqlite3_get_table 将查询得到的结果全部存入result数组,并可得到行数和列数
注意,第一行是表头
预处理查询
int rc;
sqlite3 *db;
sqlite3_stmt *stmt;
char *sql= "select * from episodes;";
const char *tail;
rc = sqlite3_open("test.db",&db);
rc = sqlite3_prepare(db,(int)strlen(sql),&stmt,&tail);
rc = sqlite3_step(stmt);
int ncols = sqlite3_column_count(stmt);
while(rc == sqlITE_ROW) //sqlite3_step() has another row ready #define sqlITE_ROW 100
{
for( int i=0; i < ncols; i++ )
cout <<sqlite3_column_text(stmt,i);cout << endl ;
rc =sqlite3_step(stmt);
}
sqlite3_finalize(stmt);
sqlite3_close(db);
sqlite3_prepare()也能接受一个包括多个sql语句的字符串,但是只处理第一个sql
若想处理多个,可应用tail参数,如下
while( sqlite3_complete(sql) )
{
rc = sqlite3_prepare(db,strlen(sql),&tail);
sql = tail;
...........
}取字段信息
sqlite3_stmt * : statement handle
int iConl : 列号
const char *sqlite3_column_name( sqlite3_stmt*,int iCol ); //获取字段名称
const char *sqlite3_database_name( sqlite3_stmt*,int iCol ); //获取数据库名称
const char *sqlite3_table_name( sqlite3_stmt*,int iCol ); //获取表的名称
intsqlite3_column_type( sqlite3_stmt*,int iCol ); //sqlite本身的类型,或称存储类
返回值说明
1:sqlITE_INTEGER
2:sqlITE_FLOAT
3:sqlITE_TEXT
4:sqlITE_BLOB
5:sqlITE_NULL
const char *sqlite3_column_decltype( sqlite3_stmt*,int iCol ); //字段声明时的类型
如果结果集中的一列不是来自一个实际的字段(如来自于表达式、函数或聚合的结果),这个函数将返回NULL
sqlite3_column_xxx()函数取当前记录中每个字段的值
int sqlite3_column_int(sqlite3_stmt*,intiCol);
double sqlite3_column_double(sqlite3_stmt*,int iCol);
long long int sqlite3_column_int64(sqlite3_stmt*,int iCol);
const void*sqlite3_column_blob(sqlite3_stmt*,int iCol);
const unsigned char*sqlite3_column_text(sqlite3_stmt*,int iCol);