C ++ Sqlite select语句并存储为向量

时间:2012-08-13 09:57:34

标签: c++ sqlite

我想从abe_account这样选择*

sqlite> select * from abe_account;
admin|Peter John|admin_account|password

但我想用C ++做这件事并返回每个元素,例如

admin as vector x[0]
Peter John as vector x[1]
admin_account as vector x[2]
password as vector x[4]

然后在关闭sqlite3_close(db)

时在外面使用它

例如cout<< x [0]<< ENDL;

我该怎么做,我试图cout<< str<< ENDL;

但它没有打印任何内容。

以下代码是我自己尝试的代码:

#include <iostream>
#include <sqlite3.h>

//g++ -o test test.cpp -lsqlite3
using namespace std;

int main()
{

    sqlite3 *db;
    sqlite3_stmt * stmt;

    if (sqlite3_open("abeserver.db", &db) == SQLITE_OK)
    {
    sqlite3_prepare( db, "SELECT * from abe_account;", -1, &stmt, NULL );//preparing the statement
    sqlite3_step( stmt );//executing the statement
    char * str = (char *) sqlite3_column_text( stmt, 0 );///reading the 1st column of the result
        }
    else
    {
        cout << "Failed to open db\n";
    }

    sqlite3_finalize(stmt);
    sqlite3_close(db);

    cout << str << endl;

    return 0;

}

1 个答案:

答案 0 :(得分:3)

执行语句时,您将获得一个表格结果。您有一些列,知道的数量,以及您不知道知道的行数。

首先,制作一个

std::vector< std::vector < std:: string > > result;

string部分是单元格中的文本。 内部向量是一行。 外部矢量是一列。

由于确切地知道 numbe rof列,因此您可以“添加列”。在您的情况下,您需要其中4个:

for( int i = 0; i < 4; i++ )
    result.push_back(std::vector< std::string >());

现在,您的外部向量有4个元素,代表4列。

现在,在您的代码中,您可以获得这样的数据

while( sqlite3_column_text( stmt, 0 ) )
{
    for( int i = 0; i < 4; i++ )
        result[i].push_back( std::string( (char *)sqlite3_column_text( stmt, i ) ) );
    sqlite3_step( stmt );
}