繁体   English   中英

Sqlite3:将数据库表名存储在向量中

[英]Sqlite3: Store db table names in a vector

注:c++98

我正在尝试检索数据库中的表名并将它们作为字符串存储在向量中。

我的代码:

typedef vector<string> dbTableTypes;

static int callback1(void *handle, int argc, char **argv, char **azColName)
{
    // FILE *f1 = (FILE *)handle;
    dbTableTypes *dbTables = (dbTableTypes*)handle;
    int i;
    char *pEnd;
    const char *sep = "\t";

    for (i = 0; i < argc; i++)
    {
        cout << argv[i] << endl;
    }

    return 0;
}

int Database::dbTableNames()
{
    static string sqlGetTableNames = "select name from sqlite_master where type = 'table';";
    vector<string> dbTables;
    char* err_msg(NULL);
    int rc(SQLITE_ERROR);
    rc = sqlite3_exec(db, sqlGetTableNames.c_str(), callback1, &dbTables, &err_msg);
}

我可以在回调中打印表名,但它没有反映在dbTableNames function 中。

自己解决了。

好奇的解决方案:

typedef vector<string> dbTableTypes;

static int callback1(void *handle, int argc, char **argv, char **azColName)
{
    dbTableTypes *dbTables = (dbTableTypes*)handle;
    int i;
    char *pEnd;
    const char *sep = "\t";

    for (i = 0; i < argc; i++)
    {
        cout << argv[i] << endl;
        dbTables->push_back(argv[i]);
    }

    return 0;
}

int Database::dbTableNames()
{
    static string sqlGetTableNames = "select name from sqlite_master where type = 'table';";
    vector<string> dbTables;
    char* err_msg(NULL);
    int rc(SQLITE_ERROR);
    rc = sqlite3_exec(db, sqlGetTableNames.c_str(), callback1, &dbTables, &err_msg);

    for(int i = 0; i < dbTables.size(); i++)
    {
        cout << "Tables: " << dbTables[i] << endl;
    }
    return 0;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM