我正在为我的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]
任何帮助将不胜感激!谢谢。
答案 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,但请检查一下。