프로그래밍 방식으로 Android에서 SQLite 데이터베이스를 삭제하는 방법


151

Android file system프로그래밍 방식으로 데이터베이스 파일을 삭제하고 싶습니까? 셸 스크립트를 실행 adb하여 Android 공간에서 셸 스크립트를 실행하여 데이터베이스를 삭제할 수 있습니까? JUnit테스트 케이스 내에서 ( system()통화 와 함께 ) 이 작업을 수행 할 수 있습니까 ?

Android에서 전체 데이터베이스를 어떻게 삭제합니까? 데이터베이스 생성을 테스트 할 수 있도록 모든 것을 없애야합니다. 나는 테이블을 삭제할 수 있지만 충분하지 않습니다. 이것은 전화가 아닌 에뮬레이터에 있습니다.

답변:


410

컨텍스트가 있고 데이터베이스 이름을 알고 있으면 다음을 사용하십시오.

context.deleteDatabase(DATABASE_NAME);

이 줄이 실행되면 데이터베이스를 삭제해야합니다.


14
삭제하기 전에 모든 데이터베이스 연결을 닫아야합니다. 그렇지 않으면 응용 프로그램을 다시 시작해야합니다.
Jay Soyer

간단하고 유용한 ... 감사합니다!
마르코 에스피 노자

13

쉘에서 쉽게 입력 할 수 있습니다.

adb shell
cd /data/data
cd <your.application.java.package>
cd databases
su rm <your db name>.db

"mydatabase.db에 대해 rm이 실패했습니다. 권한이 거부되었습니다"라는 메시지가 다시 나타납니다. 이것이 작동하려면 뿌리 전화가 있어야합니까? 아니면 권한을 지정하는 방법이 있습니까? 아니면 에뮬레이터에서만 작동합니까?
PeteH

2
@PeteH 에뮬레이터에서는 권한이 필요하지 않지만 실제 장치의 경우 루팅해야합니다
Barmaley Red Star

9
이것은 루트 필요하며 프로그래밍 방식이 아닙니다 .
Zoe

나를 위해 이것은 특별한 설정이 필요하지 않았습니다. 확실하게, 나는 자동으로 루트로 로그인했지만 모든 것이 효과가 있었다 :)
vlad-ardelean

좋아, 나 여기있어 root@generic_x86:/data/data/com.dslomer64.servyhelperton/databases #. 제거 복사, 다른 것들 이외에하는이 없다 dir거나 list files또는 what the heck is in this directory/folder명령은?
DSlomer64

12

SQLiteDatabase.deleteDatabase (파일 파일) 정적 메소드가 API 16에 추가되었습니다. 이전 디바이스를 지원하는 앱을 작성하려면 어떻게해야합니까?

나는 시도했다 : file.delete ();

그러나 SQLiteOpenHelper를 망칩니다.

감사.

신경 쓰지 마! 나중에 Context .deleteDatabase ()를 사용하고 있음을 깨달았습니다 . 컨텍스트 하나는 훌륭하게 작동하고 저널도 삭제합니다. 나를 위해 작동합니다.

또한 삭제를 수행하기 전에 SQLiteOpenHelp.close () 를 호출 해야 하므로 LoaderManager를 사용하여 다시 만들 수 있습니다.


11

시험:

this.deleteDatabase(path); 

또는

context.deleteDatabase(path);

6

또한 Eclipse에서 DDMS를 사용하면 정말 쉽습니다.

에뮬레이터가 실행 중인지 확인한 다음 Eclipse에서 DDMS Perspective로 전환하십시오. 파일 탐색기에 액세스하여 전체 데이터베이스를 쉽게 삭제하고 삭제할 수 있습니다.


1
실제 전화 장치에서 작동합니까? DDMS 모드에서 데이터 폴더를 보는 동안 하위 폴더를 볼 수 없습니다.
sammiwei

1
그러나이 질문은 프로그래밍 방식으로 데이터베이스를 삭제하는 것입니다.
Simon

6
context.deleteDatabase("database_name.db");

이것은 누군가를 도울 수 있습니다. 그렇지 않으면 확장명을 언급해야하며 작동하지 않습니다.


3

context.deleteDatabase (DATABASE_NAME); 모든 연결이 닫힌 경우에만 데이터베이스를 삭제합니다. 데이터베이스 헬퍼를 처리하기 위해 싱글 톤 인스턴스를 유지 보수하는 경우 열린 연결을 쉽게 닫을 수 있습니다.

데이터베이스 인스턴스를 직접 인스턴스화하여 여러 위치에서 사용하는 경우, 일부 연결이 열려 있어도 deleteDatabase + killProcess가 작업을 수행합니다. 응용 프로그램 시나리오에 앱을 다시 시작하는 데 문제가없는 경우 사용할 수 있습니다.


3

앱을 제거 할 때 이전 Db를 삭제하십시오.

AndroidManifest.xml 의 애플리케이션 태그에서 android : allowBackup = "false" 를 설정 하면 문제가 해결되었습니다. 이상한 이유로 앱을 배포 할 때마다 안드로이드 OS가 백업에서 복원 된 것 같습니다.


3

현재 데이터베이스 경로파일 객체를 만든 다음 폴더에서 파일을 삭제할 때 삭제할 수 있습니다

    File data = Environment.getDataDirectory();
    String currentDBPath = "/data/com.example.demo/databases/" + DATABASE_NAME;
    File currentDB = new File(data, currentDBPath);
    boolean deleted = SQLiteDatabase.deleteDatabase(currentDB);

0

Android 데이터베이스 삭제 방법을 사용했으며 데이터베이스가 성공적으로 제거되었습니다.

public bool DeleteDatabase()
        {
            var dbName = "TenderDb.db";
            var documentDirectoryPath = System.Environment.GetFolderPath(System.Environment.SpecialFolder.Personal);
            var path = Path.Combine(documentDirectoryPath, dbName);
            return Android.Database.Sqlite.SQLiteDatabase.DeleteDatabase(new Java.IO.File(path));
        }

0

자산에서 데이터베이스의 구조를 변경 한 후 디바이스에서 데이터베이스를 "포맷"하기 위해 다음을 사용했습니다. 자산에서 데이터베이스를 다시 읽길 원할 때 MainActivity의 행을 주석 해제하십시오. 그러면 자산 데이터베이스의 사전 데이터베이스와 함께 장치 데이터베이스 값과 구조가 재설정됩니다.

    //database initialization. Uncomment to clear the database
    //deleteDatabase("questions.db");

다음으로 deleteDatabase를 실행하는 버튼을 구현하여 사용자가 게임에서 진행 상황을 재설정 할 수 있도록합니다.


-2

응용 프로그램 관리자에서 데이터가 포함 된 전체 응용 프로그램을 삭제할 수 있습니다. 또는 자체 데이터만으로도 가능합니다. 여기에는 데이터베이스가 포함됩니다.

  1. 설정으로 이동하십시오. 알림 메뉴를 아래로 내리고 버튼을 누르면 앱 메뉴 또는 대부분의 휴대 전화에서 설정 메뉴로 이동할 수 있습니다.

  2. Apps 하위 메뉴를 선택하십시오. 일부 전화기에서는이 메뉴의 이름이 응용 프로그램 관리자와 약간 다릅니다.

  3. 모든 앱 목록으로 오른쪽으로 살짝 밉니다. 실행 중 및 다운로드 된 앱 목록을 무시하십시오. 모든 앱 목록을 원합니다.

  4. 비활성화하려는 앱을 선택하십시오. 왼쪽 상단에 강제 중지 버튼이 있고 오른쪽 상단에 업데이트 비활성화 또는 제거 버튼이있는 속성 화면이 나타납니다.

  5. 데이터를 삭제하십시오.


8
OP는 프로그램 적으로 말했다 . 설정으로 이동하고 버튼을 누르는 것은 프로그래밍 방식 이 아닙니다 .
19시 26 분

@mmking 나는 그것을 알고 있었다. 이것은 테이블과 내용이 아닌 데이터베이스를 제거하는 가장 간단한 방법입니다. 그는 데이터베이스 생성을 테스트하기 위해 이것이 필요하다고 말했고 이것이 그렇게한다. 나는 똑같은 것을 찾고 그것을 위해 정착했습니다.
f470071
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.