使用向量C ++

时间:2015-11-18 04:08:09

标签: c++ vector sqlite

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

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

错误:从不兼容的类型分配给'char *'       '的std :: __ 1 :: basic_string的'     sql =“INSERT INTO ARTIST(ID,NAME)”\

以下是我的代码片段:

 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]

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

1 个答案:

答案 0 :(得分:0)

你可以这样做:

// 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字符串可能更有效。