2012-04-06 2 views
5

트랜잭션을 사용하여 테이블에 여러 행을 삽입합니다. 하지만, 나는 여전히 임시 sqlite 저널 파일 sqlite 테이블과 함께 SD 카드에 만들어지고 참조하십시오.Android SQLite 저널 파일을 사용 중지하는 방법은 무엇인가요?

저널 파일 생성을 어떻게 비활성화 할 수 있습니까?

감사

+3

저널 파일은 트랜잭션을 사용할 때 sqlite db에 의해 만들어지며 어떤 이유로 트랜잭션이 외부 수단에 의해 중단되면 db가 손상되지 않도록합니다. 내가 너라면 혼자두고 갈거야. –

+0

@ Mr.Will 그렇다면 왜 안드로이드에서 다른 시스템의 기본 동작이 아닌데도 데이터베이스를 건드리는 일이 전혀 없을 때 저널을 보관해야하는 이유는 무엇입니까? – Michael

답변

8

당신은 더 -journal 파일이 생성되지 않도록 메모리에 저널을 유지하도록 선택할 수 있습니다 :이 데이터베이스를 열 때마다 실행해야

pragma journal_mode=memory; 

참고.

난 당신이 무엇을의 더 나은 아이디어를 얻을 다음 읽을 것을 권장하는 것은이 벌어지고 :

http://www.sqlite.org/pragma.html#pragma_journal_mode

+0

그럼 왜이 파일은'PRAGMA journal_mode = OFF'를 사용하고 데이터베이스를 닫은 후에도 여전히 주위에 있습니까? – Michael

+0

작동하지 않습니다. 참조 : http://stackoverflow.com/questions/39246368/how-to-turn-off-journaling-sqlite-in-android?noredirect=1#comment65828847_39246368 –

5

저널 트랜잭션을 실행할 때 사용되는 내부 SQLite는 파일 (롤백을 보장하기 위해). 당신은 그것을 불가능하게 할 수없고 당신은 원하지 않습니다.

+3

사실 PRAGMA journal_mode = OFF를 사용하여 그것을 비활성화 할 수 있습니다 :-) –

+0

다음을 시도했습니다 : Cursor c1 = db.rawQuery ("PRAGMA journal_mode = OFF", null); c1.close(). 아무 효과가없는 것 같습니다. 나는 여전히 저널 파일이 생성되는 것을 보았습니다. – Arvind

+2

예, 답안에서 언급했듯이, Pragma가 지속되지 않아 DB를 열 때마다 실행해야합니다. –

-1

당신은

@Override 
public void onOpen(SQLiteDatabase db) {   
    Cursor cc = db.rawQuery("PRAGMA journal_mode=DELETE",null); 
    Log.i(TAG,"--- cursor count " + cc.getCount());  
    super.onOpen(db);   
} 

당신은 사용할 필요가 코드 아래 사용 저널 파일을 삭제할 수 있습니다 커서. 커서는 데이터베이스 쿼리에 의해 반환 된 결과 집합에 대한 임의의 읽기 - 쓰기 액세스를 제공하는 인터페이스입니다. 커서를 사용하면 저널 파일이 삭제됩니다.

0

진술 문 PRAGMA journal_mode=OFF 또는 PRAGMA journal_mode=memory은 거래 당 유효합니다. 모든 트랜잭션에 대해이를 설정해야합니다.

관련 문제