2012-12-03 3 views
1

응용 프로그램의 SQLite DB에서 사용 가능한 여유 공간을 확보 할 수있는 방법이 있습니까? 나는 SQLiteDatabase.getMaximumSize()이 DB의 최대 크기를 반환한다는 것을 알지만, 데이터베이스가 차지하는 현재 바이트 양을 얻는 방법이 있습니까?SQLite 여유 공간 얻기 %

+2

['getPath'] (http://developer.android.com/reference/android/database/sqlite/SQLiteDatabase.html#getPath())를 사용 (HTTP를 [파일 크기]를 확인하지 왜 : //developer.android.com/reference/java/io/File.html#length())? – Joe

답변

1

의미있는 기본 최대 크기는 없습니다. 먼저 장치의 저장소 크기 제한을 실행합니다.

sqlite-analyzer과 같은 도구를 사용하여 데이터가 커질 때 데이터가 차지하는 공간을 예상 할 수 있지만 런타임에 얼마나 한계가 있는지 쉽게 알 수 없습니다.

데이터베이스가 너무 커질 염려가있는 경우 정기적으로 이전 데이터를 정리해야합니다. VACUUM (DB 파일의 임시 사본을 생성)을 사용할 수는 없지만 최소한 PRAGMA auto_vacuum을 사용하면 DB 파일 내의 사용되지 않는 페이지가 범위를 벗어나지 않도록 할 수 있습니다.

+0

감사. 앱의 저장 공간 크기 제한이 설정되었거나 전체 기기의 사용 가능한 디스크 공간을 기준으로합니까? –

+1

앱당 제한이 없습니다. –

2

질문에 답하려면 예, DB가 현재 사용중인 공간의 양을 확인하는 방법이 있습니다. Joe가 지적했듯이 파일 경로를 가져 와서 파일 크기를 확인할 수 있습니다.

데이터베이스가 특정 크기를 초과하여 증가하지 않도록하기 위해 이전에이 방법을 사용했습니다. 데이터베이스에 데이터를 쓰고 난 후에는 함수를 호출하여 크기를 확인하고 필요한 경우 행을 삭제합니다.

public synchronized void checkDbSize() 
{ 
    File f = m_context.getDatabasePath(DATABASE_NAME); 
    long dbSize = f.length(); 

    if(dbSize > DB_SIZE_LIMIT) 
    { 
     //Delete X rows from DB 
    } 
} 
+0

이것은 사용 된 공간의 현재 양을 제공하지만 사용 가능한 공간의 양은 제공하지 않습니다. DB_SIZE_LIMIT가 임의의 크기 임계 값이라고 가정합니다. –

+1

네, 그렇습니다. DB_SIZE_LIMIT는 임의의 임계 값입니다. 이 예제는 두 번째 질문에 대한 대답입니다. "데이터베이스에서 현재 차지하는 바이트 수를 얻는 방법이 있습니까?" –

관련 문제