2009-10-22 2 views
23

SQLite를 사용하는 여러 응용 프로그램에서 insert/updates/deletes뿐만 아니라 select 및 다른 쿼리에 대해서도 쿼리를 기록해야합니다. 이 경우 응용 프로그램에 로깅을 도입하는 것은 실제로 실용적인 솔루션이 될 수 없습니다. 그렇다면 어떻게 SQLite 자체에서 쿼리 로깅을 활성화 할 수 있습니까?SQLite에 대한 SQL 쿼리 로깅?

+0

응용 프로그램에서 SQLite를 사용하는 경우 좀 더 많은 정보를 추가하기 만하면 내장 SQLite 기능을 요구하는 대신 응용 프로그램 전체에 다른 로깅 시스템을 사용해야합니다. –

+0

[sqlite 데이터베이스에 로그 테이블을 유지할 수 있습니까?] (https://stackoverflow.com/questions/422951/keeping-a-log-table-in-sqlite-database) – user4157124

+0

다른 질문과 마찬가지로 데이터에 대한 수정 만 로깅하는 반면, 여기에서는 select와 같은 쿼리도 로깅합니다. 이 구별을 명확히하기 위해 편집 된 원래 질문. –

답변

10

sqlite API를 살펴보십시오. 콜백을 직접 구현해야합니다. SQL 문이 sqlite3_step()에 의해 실행되고있을 때 sqlite3_trace()에 의해 등록

void *sqlite3_trace(sqlite3*, void(*xTrace)(void*,const char*), void*); 

콜백 함수는 여러 번 호출됩니다. 명령문이 처음 실행되기 전에 콜백은 SQL 문 텍스트의 UTF-8 렌더링을 반환합니다. 트리거 된 각 서브 프로그램이 입력 될 때 추가 콜백이 발생합니다.

+0

기본적으로 로깅 코드를 작성해야한다는 말입니다. 누군가가 이미이 작업을 수행했는지 궁금합니다. 이와 같은 일반적인 사용 사례가 있습니까? –

+0

** inbuilt ** 추적 메커니즘을 호출하기 위해 COMMAND를 작성해야합니다. –

+0

sqlite3_trace API에 바인딩이 표시되지 않습니다. 래퍼 클래스를 사용하는 경우에는 SQL 문과 매개 변수에 대한 자체 로깅을 넣을 수 있습니다. – eodonohoe

관련 문제