【问题标题】:Getting error in inserting a record in sqlite3 using vectors C++使用向量 C++ 在 sqlite3 中插入​​记录时出错
【发布时间】:2015-11-18 04:08:08
【问题描述】:

我正在为我的 Unix 课程做一个项目。从我的代码中可以看出,我创建了读取文本文件并解析文本文件的函数,以便可以将字符串值存储到向量中。

将值存储到向量后,我使用该向量将记录插入到我的数据库中。出于某种原因,我无法插入我的向量并收到此错误:

错误:从不兼容的类型分配给“char *” 'std::__1::basic_string' sql = "插入艺术家(ID,姓名)" \

这是我的代码的 sn-p:


 int main(int argc, char* argv[])
  { 
    sqlite3 *db;
    int rc;
    char *zErrMsg = 0;
    char *sql;

    // initialize all text files
    ifstream artistFile("artist.txt"); //Input file
    ifstream cd("cd.txt");
    ifstream track("track.txt");

    //string sqlArtistInsert;
    string sqlCDInsert;
    string sqlTrackInsert;

    std::vector<std::string> artistVector;
    artistVector = readFile(artistVector, artistFile);

    createArtistTable();

   // Open database 
   rc = sqlite3_open("test.db", &db);
   if( rc ){
      fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
      exit(0);
   }else{
      fprintf(stderr, "Opened database successfully\n");
   }


   // Create SQL statement 
    sql = "INSERT INTO ARTIST(ID, NAME) " \
    "VALUES(" + artistVector[0] + "," + artistVector[1] +"); " \
    "VALUES(" + artistVector[2] + "," + artistVector[3] +"); " \
    "VALUES(" + artistVector[4] + "," + artistVector[5] +"); " \
    "VALUES(" + artistVector[6] + "," + artistVector[7] + ");";


// Execute SQL statement
   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, "Records created successfully\n");
   }
   sqlite3_close(db);

    return 0;
  }

由于某种原因,它说错误出现在

  sql = insert
      ^

另外,我正在解析和存储向量的文本文件如下:

1|Pink Floyd      //artistVector[0] & artistVector[1]
2|Genesis        //artistVector[2] & artistVector[3]
3|Einaudi       //artistVector[4] & artistVector[5]
4|Melanie C     //artistVector[6] & artistVector[7]

任何帮助将不胜感激!谢谢。

【问题讨论】:

    标签: c++ vector sqlite


    【解决方案1】:

    你可以这样做:

    // Create SQL statement 
    sql = "INSERT INTO ARTIST(ID, NAME) VALUES(";
    sql += artistVector[0];
    sql += ',';
    sql += artistVector[1];
    sql += ");";
    

    但请注意以下几点:

    • sql 变量应定义为std::string。如果以后需要const char *,请使用c_str() 成员函数来获取它。您不能连接 const char * 变量。

    • 使用+= 可避免在std:string 变量有多个串联时创建临时变量,因此效率更高。

    - 我认为您不能一次插入多条记录。我认为这是无效的 SQL,但请检查一下。

    • 制作具有可变占位符的 sql 字符串并使用 bind 而不是像您正在做的那样构造 sql 字符串可能更有效。

    【讨论】:

    • 这就是我所做的,现在我收到一条错误消息: SQL 错误:靠近“Floyd”:语法错误我假设它是每当我解析数据时?不确定...但是向量中的每个索引都是这样的:artistVector[0] = 1 ArtistVector[1] = Pink Floyd ArtistVector[2] = 2 ArtistVector[3] = Genesis ArtistVector[4] = 3 ArtistVector[5] = Einaudi ArtistVector[6] = 6 ArtistVector[7] = Melanie C 它说它在弗洛伊德附近失败了。也许是由于下一行?没有把握。在它显示的确切文本文件上:
    • @BarcodePiglet 编辑您的原始问题并显示您的确切代码和编译器错误。否则很难弄清楚。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-29
    相关资源
    最近更新 更多