를 쿼리를 "선택"하고 문자를 저장하고있는 NSMutableArray array.Create의 값을 int로하고 다음 SELECT 쿼리 국지적에서 얻을 것이다 값을 저장하여 값을 도움이 될 것입니다하기 당신이 근래,
sqlite3_prepare*
를 사용하는 경우
struct MyData {
string A;
int B, C;
};
int exec_callback(void *ptr, int argc, char *argv[], char *names[])
{
vector<MyData> *list = reinterpret_cast<vector<MyData> *>(ptr);
MyData d;
d.A = argv[0] ? argv[0] : "";
d.B = atoi(argv[1]);
d.C = atoi(argv[2]);
list->push_back(d);
return 0;
}
void query_with_exec()
{
vector<MyData> list;
char *errmsg = NULL;
sqlite3_exec(db, "SELECT a, b, c FROM SQList /* WHERE ... */",
exec_callback, &list, &errmsg);
if (errmsg) {
printf("error: %s!\n", errmsg);
return;
}
// use list ...
}
:
sqlite3_exec
를 사용하여, 당신은 문자열에서 모든 값을 변환해야합니다, 당신은 데이터를 반환하는 콜백의 void *
포인터 또는 일부 전역 변수를 사용해야합니다 그것은 더 이상 SQLITE_ROW
을 반환하지 않습니다 (당신은 단지 하나 개의 레코드를 예상 할 때, 당신은 한 번만 호출 할 수 있습니다)까지 전자는 루프에서 sqlite3_step
를 호출 :
void query_with_step()
{
vector<MyData> list;
sqlite3_stmt *stmt;
int rc = sqlite3_prepare_v2(db, "SELECT a, b, c FROM SQList /* WHERE ... */",
-1, &stmt, NULL);
if (rc != SQLITE_OK) {
printf("error: %s!\n", sqlite3_errmsg(db));
return;
}
for (;;) {
rc = sqlite3_step(stmt);
if (rc == SQLITE_DONE)
break;
if (rc != SQLITE_ROW) {
printf("error: %s!\n", sqlite3_errmsg(db));
break;
}
MyData d;
const char *text = (const char *)sqlite3_column_text(stmt, 0);
d.A = text ? text : "";
d.B = sqlite3_column_int(stmt, 1);
d.C = sqlite3_column_int(stmt, 2);
list.push_back(d);
}
sqlite3_finalize(stmt);
// use list ...
}
은 [여기]를 언급 튜토리얼 (HTTP 있습니다 : // 유래 .com/questions/10363028/how-to-use-sqlite-in-xcode-storyboard). – monex0