使用 sqlite3 和 C++ 绑定和返回文本数据

Binding and returning text data with sqlite3 and C++

本文关键字:文本 数据 返回 C++ sqlite3 使用 绑定      更新时间:2023-10-16

我正在尝试重新为我想从事的个人项目编程,但我在弄清楚 sqlite3 c/c++ API 时遇到了麻烦。 我正在修改在各种教程中找到的代码片段,并尝试让它们从数据库中返回数据和字段名称。 这是我遇到困难的代码部分:

  sqlite3 *db;
  sqlite3_stmt *ppStmt;
  int col_num;
  char *zErrMsg = 0;
  const char   *zSql = "SELECT ?,? FROM basic_table";
  string s = "Field1";
  string t = "Field2";
  rc = sqlite3_prepare_v2(db,zSql,-1,&ppStmt,0);  
  sqlite3_bind_text(ppStmt,1,s.c_str(),s.length(),SQLITE_TRANSIENT);
  sqlite3_bind_text(ppStmt,2,t.c_str(),t.length(),SQLITE_TRANSIENT);
  if(rc)
  {
    cerr << "SQL error: " << sqlite3_errmsg(db) << endl;
  }
  else
  {
    col_num = sqlite3_column_count(ppStmt);
    do
    {
      rc = sqlite3_step(ppStmt);
      switch(rc)
      {
        case SQLITE_DONE:
          break;
        case SQLITE_ROW:
          for( int i=0; i<col_num; i++)
          {
            cout << sqlite3_column_name(ppStmt, i) << " " << 
             sqlite3_column_text(ppStmt,i) << endl;
          }
          break;
        default:
          cerr << "Inside error " << sqlite3_errmsg(db) << endl;
          break;
      }
    } while( rc==SQLITE_ROW );
    sqlite3_finalize(ppStmt);

column_name返回正确的值,但数据只是返回一个问号。 我可以通过使用回调函数调用sqlite3_exec来使代码工作,但 sqlite3 的文档建议使用 sqlite3_prepare_v2、sqlite3_bind、sqlite3_step 和 sqlite3_finalize 而不是此方法,所以我只是想看看我是否可以让该方法工作。 我犯了一个简单的错误吗? 任何建议将不胜感激。

这些列的名称? ,因为它们在查询中就是这样写的。

这些列的值是Field1Field2的,因为您告诉数据库您希望这些字符串值由 SELECT 返回。

数据库按设计工作。

参数只能用于替换表达式的值;不能使用它们来替换列/表名等标识符。您必须直接在 SQL 语句中写入列名:

const char *zSql = "SELECT Field1, Field2 FROM basic_table";