2017-05-08 6 views
0

delete 명령을 사용하여 메모리를 확보하려면 VACUUM 명령에 큰 문제가 있습니다.sqlite3 vacuum, cordova에서 사용하는 방법 APP

나는 Cordova 안드로이드 APP를 만들고, 내가 DELETE SQL 문장을 사용할 때 응용 프로그램의 공간이 다운되지 않는다는 것을 안다.이 공간은 조각 하드 디스크처럼 지속된다.

그런 다음 VACUUM이 내 DB를 압축 할 수 있지만 문제가 있음을 확인했습니다. 나는 모든 사이트에서 sqlite3를, 진공을 사용

는 다음과 같이, 즉 트랜잭션에서 실행 할수 없어 말 :

var db = window.sqlitePlugin.openDatabase({name:"maintenance", location:'default'}); 
db.transaction(function (tx) { 
    tx.executeSql('VACUUM', [], function (tx, results) { 
     alert('done'); 
}, function (tx, error) { 
     alert('error'); 
     alert(error.message); 
    }); 
}); 

좋아

, 그럼, 내가 트랜잭션에서 할 수없는 경우, 수 어떻게하면 진공 또는 자동 진공 또는 유사한 라인 명령을 쓰지 않고도 BD를 압축 실행할 수 말해?

답변

1

the GitHub Page에 따르면, 당신은 db.executeSql와 트랜잭션 외부에서 SQL을 수행 할 수 있어야한다 (자사의 모바일 앱이 기억) :

db.executeSql("VACUUM", [], function(rs) { 
    // ok 
}, function(err) { 
    // handle error 
}); 
+0

안녕하세요, 도움을 감사합니다, 내가 사용하는 중 거래. ok 블록의 "VACUUM DONE"메시지는 표시되지만 결과는 표시되지 않습니다. 앱의 데이터 크기가 진공 이후와 이전과 동일합니다. – Armando

+0

@Armando 삭제하려는 데이터의 양은 어느 정도입니까? SQLite는 페이지 크기의 배수로 공간을 할당하므로 몇 행만 삭제할 경우 페이지를 비울만큼 충분한 여유 공간이 확보되지 않습니다. –

+0

그래, 맞아! 내가 bbdd 테이블에 40000 행을 삽입, 내 애플 리케이션 데이터 크기는 484KB이고 40k 행은 2.18MB이다. 그런 다음 진공으로 데이터 크기를 500KB로 낮 춥니 다. 도움을 주신 THX 중령 :) – Armando