我如何使用sqlite3存储到C ++变量中?

问题描述 投票:-1回答:1

我是C ++世界的新手。

我正在尝试将已创建的sqlite表中包含的值存储到变量中,但我不知道该怎么做(在这里询问之前我做了很多研究)。

因此,在打开数据库连接后,我将执行此操作:

   char* sql = new char[4096];
   strcpy(sql, statement.c_str());

   /* Execute SQL statement */
   int rc = sqlite3_exec(DB, sql, callback, 0, &zErrMsg);

   if( rc != SQLITE_OK ){
      fprintf(stderr, "SQL ERROR: %s\n", zErrMsg);
      sqlite3_free(zErrMsg);
   } else {
      fprintf(stdout, "STATEMENT:\n\n%s\n\nEXECUTED SUCCESSFULLY!\n\n", statement.c_str());
   }

我明白了:

OPENED DATABASE SUCCESSFULLY
sent = 0

sent = 0

sent = 0

sent = 0

sent = 0

sent = 1

sent = 1

sent = 1

STATEMENT:

SELECT sent FROM Message;

EXECUTED SUCCESSFULLY!

我想做的是将“已发送”(db中的数据类型为布尔值)中包含的值存储在一个int变量中,我可以使用它检查某些条件。或将所有值存储到int数组中。

我该怎么办?请帮助我!

非常感谢!

编辑:我正在使用sqlite3库。

这是我的回调函数:

static int callback(void *NotUsed, int argc, char **argv, char **azColName) {
   int i;
   for(i = 0; i<argc; i++) {
      printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
   }
   printf("\n");
   return 0;
}
c++ database sqlite int
1个回答
0
投票

callback是为结果集的每一行调用的函数。您可以在该函数中将值分配给数组或向量。 https://www.sqlite.org/c3ref/exec.html

sqlite3_exec()回调函数的第二个参数是数字结果中的列数。 sqlite3_exec()的第三个参数回调是指向字符串的指针数组,就像从sqlite3_column_text(),每列一个。如果结果的元素行为NULL,则对应的字符串指针sqlite3_exec()回调是NULL指针。第四个论点sqlite3_exec()回调是指向字符串的指针数组,其中每个字符串条目代表获得的相应结果列的名称来自sqlite3_column_name()。

您需要类似的东西:

int callback(void *p, int size, char **column_text, char **column_name) {
    if (size == 0) return -1;
    auto &container = *static_cast<std::vector<std::string>*>(p);
    if (!column_text[0]) container.push_back("NULL");
    else container.push_back(column_text[0]);
    return 0;
}

然后您可以使用以下方法将值存储在容器中:

std::vector<std::string> container;
/* Execute SQL statement */
int rc = sqlite3_exec(DB, statement.c_str(), callback, &container, &zErrMsg);

if( rc != SQLITE_OK ){
   fprintf(stderr, "SQL ERROR: %s\n", zErrMsg);
   sqlite3_free(zErrMsg);
} else {
   fprintf(stdout, "STATEMENT:\n\n%s\n\nEXECUTED SUCCESSFULLY!\n\n", statement.c_str());
}
© www.soinside.com 2019 - 2024. All rights reserved.