sqlite
sqlite3_stmt : 준비된 문 (C API)
수색…
비고
공식 문서 : Prepared Statement 객체
명령문 실행
문은 sqlite3_prepare_v2 () 와 같은 함수로 생성됩니다.
준비된 명령문 개체 는 sqlite3_finalize () 로 정리 해야합니다 . 오류가 발생하면이 사실을 잊지 마십시오.
매개 변수 가 사용되면 sqlite3_bind_xxx () 함수를 사용하여 값을 설정하십시오.
실제 실행은 sqlite3_step () 이 호출 될 때 발생합니다.
const char *sql = "INSERT INTO MyTable(ID, Name) VALUES (?, ?)";
sqlite3_stmt *stmt;
int err;
err = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (err != SQLITE_OK) {
printf("prepare failed: %s\n", sqlite3_errmsg(db));
return /* failure */;
}
sqlite3_bind_int (stmt, 1, 42); /* ID */
sqlite3_bind_text(stmt, 2, "Bob", -1, SQLITE_TRANSIENT); /* name */
err = sqlite3_step(stmt);
if (err != SQLITE_DONE) {
printf("execution failed: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return /* failure */;
}
sqlite3_finalize(stmt);
return /* success */;
커서에서 데이터 읽기
SELECT 쿼리는 다른 명령문처럼 실행 됩니다. 반환 된 데이터를 읽으려면 루프에서 sqlite3_step () 을 호출하십시오. 다음을 반환합니다.
- SQLITE_ROW : 다음 행의 데이터를 사용할 수있는 경우 또는
- SQLITE_DONE : 더 이상 행이 없거나 또는
- 모든 오류 코드.
쿼리가 행을 반환하지 않으면 첫 번째 단계는 SQLITE_DONE을 반환합니다.
현재 행의 데이터를 읽으려면 sqlite3_column_xxx () 함수를 호출하십시오.
const char *sql = "SELECT ID, Name FROM MyTable";
sqlite3_stmt *stmt;
int err;
err = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (err != SQLITE_OK) {
printf("prepare failed: %s\n", sqlite3_errmsg(db));
return /* failure */;
}
for (;;) {
err = sqlite3_step(stmt);
if (err != SQLITE_ROW)
break;
int id = sqlite3_column_int (stmt, 0);
const char *name = sqlite3_column_text(stmt, 1);
if (name == NULL)
name = "(NULL)";
printf("ID: %d, Name: %s\n", id, name);
}
if (err != SQLITE_DONE) {
printf("execution failed: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return /* failure */;
}
sqlite3_finalize(stmt);
return /* success */;
준비된 문장을 여러 번 실행하기
문이 실행 된 후 sqlite3_reset ()을 호출하면 다시 실행될 수 있도록 원래 상태로 돌아갑니다.
일반적으로 문 자체는 동일하게 유지되지만 매개 변수는 변경됩니다.
const char *sql = "INSERT INTO MyTable(ID, Name) VALUES (?, ?)";
sqlite3_stmt *stmt;
int err;
err = sqlite3_prepare_v2(db, sql, -1, &stmt, NULL);
if (err != SQLITE_OK) {
printf("prepare failed: %s\n", sqlite3_errmsg(db));
return /* failure */;
}
for (...) {
sqlite3_bind_int (stmt, 1, ...); /* ID */
sqlite3_bind_text(stmt, 2, ...); /* name */
err = sqlite3_step(stmt);
if (err != SQLITE_DONE) {
printf("execution failed: %s\n", sqlite3_errmsg(db));
sqlite3_finalize(stmt);
return /* failure */;
}
sqlite3_reset(stmt);
}
sqlite3_finalize(stmt);
return /* success */;
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow