sqlite3 c 예제

sqlite3_exec() 함수는 sqlite3_prepare_v2(), sqlite3_step(및 sqlite3_finalize() 주위의 편리한 래퍼로, 응용 프로그램에서 많은 C 코드를 사용하지 않고도 SQL의 여러 문을 실행할 수 있습니다. 일반적으로 동일한 SQL 문을 두 번 이상 평가하는 것은 유용하지 않습니다. 더 자주, 하나는 유사한 문을 평가하려고합니다. 예를 들어 다른 값으로 INSERT 문을 여러 번 평가할 수 있습니다. 또는 WHERE 절의 다른 키를 사용하여 동일한 쿼리를 여러 번 평가할 수 있습니다. 이를 수용하기 위해 SQLite는 SQL 문이 평가되기 전에 값에 “바인딩”된 매개 변수를 포함할 수 있도록 합니다. 이러한 값은 나중에 변경할 수 있으며 준비된 동일한 문을 새 값을 사용하여 두 번째로 평가할 수 있습니다. 위의 예에서 NNN은 정수 값이고 AAA는 식별자입니다. 매개 변수는 처음에 NULL 값을 가집니다.

sqlite3_step()을 처음 호출하기 전에 또는 sqlite3_reset() 직후에 응용 프로그램은 sqlite3_bind() 인터페이스를 호출하여 매개 변수에 값을 연결할 수 있습니다. sqlite3_bind() 호출마다 동일한 매개 변수에서 이전 바인딩을 재정의합니다. 응용 프로그램은 일반적으로 sqlite3_open()을 사용하여 초기화 하는 동안 단일 데이터베이스 연결을 만듭니다. sqlite3_open()은 기존 데이터베이스 파일을 열거나 새 데이터베이스 파일을 만들고 여는 데 사용할 수 있습니다. 대부분의 응용 프로그램은 단일 데이터베이스 연결만 사용하지만 동일한 데이터베이스 또는 다른 데이터베이스에 대해 여러 데이터베이스 연결을 열기 위해 응용 프로그램이 sqlite3_open() 를 여러 번 호출할 수 없는 이유는 없습니다. 경우에 따라 다중 스레드 응용 프로그램은 각 스레드에 대해 별도의 데이터베이스 연결을 만듭니다. 단일 데이터베이스 연결은 ATTACH SQL 명령을 사용하여 두 개 이상의 데이터베이스에 액세스할 수 있으므로 각 데이터베이스 파일에 대해 별도의 데이터베이스 연결을 가질 필요는 없습니다. sqlite3_prepare() → 데이터베이스를 쿼리하거나 업데이트하는 작업을 수행하는 바이트 코드로 SQL 텍스트를 컴파일합니다. sqlite3_stmt의 생성자입니다. sqlite3_prepare_v2() 함수는 5개의 매개 변수를 사용합니다. 첫 번째 매개 변수는 sqlite3_open() 함수에서 얻은 데이터베이스 핸들입니다. 두 번째 매개 변수는 컴파일할 SQL 문입니다.

세 번째 매개 변수는 바이트 단위로 측정된 SQL 문의 최대 길이입니다. -1을 통과하면 SQL 문자열이 여기서 문자열의 끝인 첫 번째 0 종결자까지 읽힙니다. 설명서에 따르면 제공된 SQL 문자열의 정확한 바이트 수를 전달하여 약간의 성능 이점을 얻을 수 있습니다. 네 번째 매개 변수는 문 핸들입니다. sqlite3_prepare_v2()가 성공적으로 실행되는 경우 미리 컴파일된 문을 가리킵니다. 마지막 매개 변수는 SQL 문의 사용되지 않는 부분에 대한 포인터입니다. SQL 문자열의 첫 번째 문만 컴파일되므로 매개 변수는 컴파일되지 않은 상태로 남아 있는 것을 가리킵니다. 매개 변수가 중요하지 않기 때문에 우리는 0을 전달합니다. 편의 함수 sqlite3_exec()는 위의 단계를 결합합니다. 그러나 값 바인딩을 구현 하지 나타납니다. 사용자 입력의 경우 매우 신중한 마스킹 이나 고전적인 방법을 사용 하십시오. 다음 예제에서는 한 번의 호출로 두 개의 SQL 쿼리를 실행하는 방법을 보여 주십습니다.

결과 데이터는 콜백 함수에 제공됩니다. 여기서 첫 번째 인수 sqlite3는 열린 데이터베이스 개체이며, sqlite_callback은 데이터가 첫 번째 인수이고 errmsg가 루틴에서 발생하는 오류를 캡처하기 위해 반환되는 호출입니다. 다음 예제는 자동 커밋 모드를 더 명확히 합니다. 자동 커밋 모드에서 SELECT가 아닌 각 문은 즉시 커밋되는 작은 트랜잭션입니다. 감사합니다. 이것은 SQLite가 자신의 웹 사이트에 있어야하는 간단하고 완전한 예입니다. 이 루틴은 sqlite3_step()에 의해 평가되는 준비된 문에 대해 결과 집합의 현재 행에서 단일 열을 반환합니다.