0
SQLite3 데이터베이스를 반복하는 C++ 응용 프로그램이 있습니다. 각 행은 벡터에 대해 확인 된 ID를 포함합니다. DB에있는 ID가 벡터에 없으면 준비된 문으로 삭제해야합니다. 다음 코드를 사용하지만 ID는 삭제되지 않습니다. 나도 sqlite3_step(stmt2)
함수에서 오류 메시지를받을 수 없습니다. 그런 식으로 당신이 그것을 사용하기 전에 문을 완료하기 때문에C++ SQLite3 prepared delete 문이 작동하지 않습니다.
//SETTINGS["Reference"] CONTAINS THE REFERENCE FOR THE ID's (IT's 1 FOR UNDERNEATH EXAMPLE)
vector<int> IDs; //THIS VECTOR CONTAINS THE ID's IN MY APPLICATION
rc = sqlite3_prepare_v2(db, "SELECT ID FROM Files WHERE Reference=?", -1, &stmt, 0);
sqlite3_bind_text(stmt, 1, Settings["Reference"].c_str(), Settings["Reference"].length(), 0);
CheckDBError(rc);
rc = sqlite3_step(stmt);
sqlite3_stmt* stmt2;
int rc2 = sqlite3_prepare_v2(db, "DELETE FROM Files WHERE ID=? AND Reference=?", -1, &stmt2, 0);
CheckDBError(rc2);
while(rc == SQLITE_ROW) {
string IDToCheck = NumberToString(sqlite3_column_int64(stmt, 0));
if (std::find(IDs.begin(), IDs.end(), IDToCheck) == IDs.end()) { //VERIFY AGAINST VECTOR WORKS AS EXPECTED
//I GET HERE WITH ALL MY ID's I HAVE CHECKED THAT ALREADY :)
sqlite3_bind_text(stmt2, 1, IDToCheck.c_str(), IDToCheck.length(), 0);
sqlite3_bind_text(stmt2, 2, Settings["Reference"].c_str(), Settings["Reference"].length(), 0);
rc2 = sqlite3_step(stmt2);
//CAN'T GET ANY ERROR MESSAGE (SO QUERY IS FINE, WHICH SEEMS LIKE IT?)
}
rc = sqlite3_step(stmt);
}
sqlite3_finalize(stmt);
sqlite3_finalize(stmt2);
와우, 나는 이것을 보지 못했습니다 ... 이것은 오류입니다. 좋은 눈을 가져 주셔서 감사합니다 :) –
그 행을 삭제 했는데도 여전히 행을 삭제하지 않고 있습니까? –
다음은 몇 가지 생각입니다. 각 레코드에 대한 문을 사용하고 매개 변수없이 컴파일합니다 (디버깅 목적으로 만 사용). 작동한다면 매개 변수 처리에 문제가있을 수 있습니다. 또 다른 점은 ID에 정수와 문자열을 혼합한다는 것입니다. 당신이 특별한 이유가 없다면 나는 SQLite 호출을위한 정수를 고수 할 것이다. – themiurge