5

このように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;など

どうすればいいですか、私は<< str<<endl;をcoutしようとしました。

しかし、それは何も印刷しません。

以下のコードは私が自分で試したものです:

#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;

}
4

1 に答える 1

8

ステートメントを実行すると、結果が表として得られます。量がわかっている列と、量がわからない行があります。

まず、

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

string部分はセル内のテキストです。内部ベクトルは行です。外側のベクトルは列です。

列数が正確にわかっているので、「列を追加」できます。あなたの場合、それらのうちの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 );
}
于 2012-08-13T10:10:39.620 に答える