수색…


비고

공식 문서 : 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