我需要執行 sql 命令“select”并從它的結果中回傳一些資料。我試圖用 sqlite3_exec 來做,但它只寫在標準輸出中。我需要做什么才能將資料寫入陣列或類似的東西?
static int callback(void *NotUsed, int argc, char **argv, char **azColName){
int i;
for(i=0; i<argc; i ){
printf("%s = %s\n", azColName[i], argv[i] ? argv[i] : "NULL");
}
printf("\n");
return 0;
}
void my_exec(char * sql) {
sqlite3 *db;
char *zErrMsg = nullptr;
int rc;
//char * sql;
/* Open database */
rc = sqlite3_open("data_base.db", &db);
if (rc) {
fprintf(stderr, "Can't open database: %s\n", sqlite3_errmsg(db));
exit(0);
} else {
fprintf(stdout, "Opened database successfully\n");
}
/* Create SQL statement */
// sql
/* Execute SQL statement */
rc = sqlite3_exec(db, sql, callback, nullptr, &zErrMsg);
if (rc != SQLITE_OK) {
fprintf(stderr, "SQL error: %s\n", zErrMsg);
sqlite3_free(zErrMsg);
} else {
fprintf(stdout, "Success\n");
}
/* Close database */
sqlite3_close(db);
}
uj5u.com熱心網友回復:
我們來看看 的第四個引數sqlite3_exec()。這是一個傳遞給回呼函式的指標。提供sqlite3_exec()指向您的資料結構的指標并將結果存盤到回呼中的該指標。
例如,您可以使用向量:
std::vector<std::pair<std::string, std::string>> vec;
rc = sqlite3_exec(db, sql, callback, &vec, &zErrMsg);
回呼:
static int callback(void *dataPtr, int argc, char **argv, char **azColName){
auto vec = static_cast<std::vector<std::pair<std::string, std::string>>*>(dataPtr);
int i;
for(i=0; i<argc; i ){
vec->push_back({azColName[i], argv[i] ? argv[i] : "NULL"});
}
return 0;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/qianduan/465368.html
