我正在使用C ++中的Sqlite,我将编写一个函数,它接受一个字符串作为select查询命令,并返回一个数据向量作为数据表。
该功能如下所示:
DataTable Select(const char *query);
DataTable是一个typedef:
typedef vector<vector<void*>> DataTable;
我决定使用void *,因为该函数必须适用于任何select查询命令,在这种情况下,列类型是不可预测的。
在Select函数的定义中我有:
DataTable Select(const char *query)
{
int ret;
sqlite3_stmt *stmt;
ret = sqlite3_prepare_v2(m_Db, qStr, strlen(query), &stmt, 0);
int nSize= sqlite3_column_count(stmt);
DataTable dt;
if (nSize> 0)
{
int type;
int nRow = -1;
do
{
ret = sqlite3_step(qStmt);
if (ret == SQLITE_ROW)
{
nRow++;
dt.push_back(vector<void*>());
for (int i = 0; i < nSize; i++)
{
type= sqlite3_column_type(stmt, 0);
switch (type)
{
case SQLITE_INTEGER:
{
dt[nRow].push_back(sqlite3_column_int64(stmt, i));
}
break;
.
.
.
default:
break;
}
}
}
} while (ret == SQLITE_ROW);
}
return dt;
}
我的问题是我无法将任何数据推送到DataTable向量。
dt[nRow].push_back(sqlite3_column_int64(stmt, i));
也许我根本不应该使用矢量。请指导我如何处理这个问题。
谢谢。