Android Studio에서 ADB를 사용하여 SQLite DB를 보는 방법


83

내 SQLite db를보아야하는데 어떻게해야하는지 모르겠습니다. 나는에 갔어요 http://www.sqlite.org/download.html 내 OS의 명령 행 쉘을 다운로드,하지만 난이 프로그램을 실행하고 입력 할 때 adb ...나는 오류를 얻을.

참고 : Android Studio를 사용하고 있으므로 추가로 설치할 필요가 없다고 가정합니다. Android Studio에 필요한 모든 SDK 도구가 있다고 말한 것이 기억납니다.

답변:


160

가장 쉬운 방법 : ADB Shell을 통해 Sqlite3에 연결

Android Studio에서이를 수행하는 방법을 찾지 못했지만 매번 파일을 가져 오는 대신 원격 셸을 사용하여 db에 액세스합니다.

여기에서 모든 정보 찾기 : http://developer.android.com/tools/help/sqlite3.html

1- 명령 프롬프트에서 플랫폼 도구 폴더로 이동하십시오.

2- 명령 adb devices을 입력 하여 장치 목록을 가져옵니다.

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb devices
List of devices attached
emulator-xxxx   device

3- 장치에 셸을 연결합니다.

C:\Android\adt-bundle-windows-x86_64\sdk\platform-tools>adb -s emulator-xxxx shell

4a- 루팅 된 기기에서이 단계를 건너 뛸 수 있습니다.

run-as <your-package-name> 

4b- db 파일이있는 폴더로 이동합니다.

cd data/data/<your-package-name>/databases/

5- sqlite3을 실행하여 db에 연결하십시오.

sqlite3 <your-db-name>.db

6- 원하는 sqlite3 명령 실행 :

Select * from table1 where ...;

참고 : 아래에서 실행할 더 많은 명령을 찾으십시오.

SQLite 치트 시트

SQLite 데이터베이스에서 테이블을 보는 몇 단계가 있습니다.

  1. 데이터베이스의 테이블을 나열하십시오.

    .tables
    
  2. 표가 어떻게 보이는지 나열하십시오.

    .schema tablename
    
  3. 전체 표를 인쇄합니다.

    SELECT * FROM tablename;
    
  4. 사용 가능한 모든 SQLite 프롬프트 명령을 나열합니다.

    .help
    

1
이 방법은 루트가 필요합니까?
tomislav2012

1
@ tomislav2012 네가 /data/data디렉토리에 들어가기 때문에 예
Dheeraj Bhaskar

1
sqlite3를 명령은 안드로이드 4.1 실행 내 HTC 하나 S에 인식되지 않습니다
알렉스

내가 sqlite3를 찾는하고 가능하다면 그것을 설치하는 게 좋을 것 @ 알렉스, 개발은 그것으로 간단
Dheeraj 바스 카르

1
감사. sqlite 파일을 컴퓨터 바탕 화면으로 전송하려면 먼저 cp /data/data/<your-package-name>/databases/<your-db-name>.db /sdcard. 그런 다음 Explorer와 같은 파일 관리자를 사용하여 파일을 이메일로 보냅니다. :)
Cheok Yan Cheng

76

나에게 가장 쉬운 방법은 Android Device Monitor를 사용하여 데이터베이스 파일을 가져오고 SQLite DataBase Browser를 사용하여 Android Studio를 사용하여 Android를 프로그래밍하는 동안 파일을 보는 것입니다.

1) Android Studio에서 Android 에뮬레이터로 데이터베이스 앱을 실행하고 실행합니다. (확인하기 위해 데이터베이스 앱에 일부 데이터를 삽입했습니다)

2) Android Device Monitor를 실행합니다. 달리는 방법?; 로 이동하십시오 [your_folder] > sdk >tools. 해당 폴더에서 monitor.bat를 볼 수 있습니다. shift + right click폴더 안에 " Open command window here"를 선택 합니다. 이 작업은 명령 프롬프트를 시작합니다. 유형 monitor및 Android Device Monitor가 시작됩니다.

3) 현재 실행중인 에뮬레이터를 선택합니다. 그런 다음data>data>[your_app_name]>databases

4) 아이콘 (오른쪽 상단 모서리에 있음)을 클릭하고 (아이콘 위로 마우스를 가져 가면 "장치에서 파일 가져 오기"가 표시됨) 원하는 곳에 저장합니다.

5) SQLite 데이터베이스 브라우저를 시작합니다. 방금 저장 한 파일을 해당 브라우저에 끌어다 놓습니다.

6) Browse Data탭으로 이동 하여 보려는 테이블을 선택하십시오.

여기에 이미지 설명 입력 여기에 이미지 설명 입력


9
나는 당신이 장치 모니터에서 데이터 디렉토리를 열 수 없다고 생각합니다. 적어도 나는 그것을 할 수 없습니다.
Estevex 2014

6
루팅되지 않은 기기에서는 데이터 디렉토리를 열 수 없지만 에뮬레이터에서는 열 수 있습니다.
Tad

3
루팅되지 않은 장치에서 데이터를 여는 방법은 무엇입니까?
Sujith Manjavana

4
에뮬레이터가 실행되는 동안 adb를 사용하여 에뮬레이트 된 Android에서 파일을 다운로드 할 수 있습니다. 예 : adb pull /data/data/com.yourpackagename.here/databases/yourdbfile.db
Baker

@SujithManjavana가 게스트 OS의 에뮬레이터 경로에있는 동안 데이터베이스 브라우저에서 sqlite 데이터베이스를 여는 것에 대해 이야기하고 있다고 생각합니다. 호스트 OS로 다시 복사 한 후가 아닙니다.
Pradeep Sanjaya

14

현재 겪고있는 문제는 일반적이며 설명서에 잘 설명되어 있지 않습니다. 일반 장치에는 sqlite3 데이터베이스 바이너리가 포함되어 있지 않으므로 오류가 발생합니다. Android Emeulator, OSX, Linux (설치된 경우) 및 Windows (설치된 후)에는 바이너리가 있으므로 머신에서 로컬로 데이터베이스를 열 수 있습니다.

해결 방법은 장치에서 로컬 시스템으로 데이터베이스를 복사하는 것입니다. 이것은 ADB로 수행 할 수 있지만 여러 단계가 필요합니다.

시작하기 전에 몇 가지 정보가 필요합니다.

  • SDK의 경로 (OS 환경에 포함되지 않은 경우)
  • 귀하의 <package name>예를 들어,com.example.application
  • <local path>예를 들어 데이터베이스를 배치합니다. ~/Desktop또는%userprofile%\Desktop

다음으로 아래 예에서 각 명령이 첫 번째 문자에 기록되는 터미널을 이해해야합니다. 입력되지는 않지만 어떤 쉘에 있는지 알려줍니다.

  • > = OS 명령 프롬프트
  • $ = ADB 쉘 명령 프롬프트
  • ! = 관리자 명령 프롬프트로 ADB 쉘
  • %

그런 다음 터미널 또는 명령에서 다음 명령을 입력하십시오 (에 첫 문자 나 텍스트를 입력하지 마십시오 ()).

> adb shell
$ su
! cp /data/data/<package name>/Databases/<database name> /sdcard
! exit
$ exit
> adb pull /sdcard/<database name> <local path>
> sqlite3 <local db path>
% .dump
% .exit  (to exit sqldb)

이것은 데이터베이스를 로컬 머신에 복사하고 로컬에서 데이터베이스를 읽는 방법에 대한 진정한 라운드입니다. 에뮬레이터에서 기기에 sqlite3 바이너리를 설치하는 방법을 설명하는 SO 및 기타 리소스가 있지만 한 번만 액세스하면이 프로세스가 작동합니다.

대화식으로 데이터베이스에 액세스해야하는 경우 에뮬레이터 (이미 sqlite3가 있음)에서 앱을 실행하거나 sqlite를 장치 / xbin 경로에 설치 하는 것이 좋습니다 .


9
  1. 터미널 열기
  2. cd <ANDROID_SDK_PATH>(Windows의 경우 cd C:\Users\Willi\AppData\Local\Android\sdk)
  3. cd platform-tools
  4. adb shell (하나의 에뮬레이터 만 실행중인 경우에만 작동합니다.)
  5. cd data/data
  6. su (슈퍼 유저 권한 획득)
  7. cd <PACKAGE_NAME>/databases
  8. sqlite3 <DB_NAME>
  9. SQL 문을 발행하십시오 ( 중요 :로 종료 ;하십시오. 그렇지 않으면 명령문이 발행되지 않고 대신 새 행으로 구분됩니다.)

참고 : 디렉토리 내용을 나열해야하는 경우 ls(Linux) 또는 dir(Windows)를 사용하십시오 .


8

adb를 입력 할 때 언급되는 내용은 무엇입니까?

step1. >adb shell
step2. >cd data/data
step3. >ls -l|grep "your app package here"
step4. >cd "your app package here"
step5. >sqlite3 xx.db

글쎄 ... 어디에 입력 해야할지 모르겠습니다 adb... SQLite3 셸에 입력하면 나에게 제공 ...>되고 명령이 계속 될 것으로 예상됩니다. 기본적으로 ;. 세미콜론을 error: near "adb": syntax error입력 adb shell하면 명령 프롬프트에 입력 하면 adb가 인식 된 명령이 아니라는 메시지가 나타납니다. 경로 파일에 adb를 추가해야합니까?
Terence Chow

먼저 : adb shell (mac or linux : execute in terminal; windows : run at cmd); 그런 다음 adb shell에서 sqlite3 commond를 실행해야합니다.
log1000

1
ADB 셸에서 sqlite3 명령을 어떻게 실행합니까? 그것은 말한다 : /system/bin/sh: sqlite3: not found... 그리고 ... 이미 경로 변수로 sqlite3를하고 ADB를 추가 한
테렌스 차우

어떤 장치를 사용합니까? 이것이 힌트를 제공하기를 바랍니다. stackoverflow.com/questions/3645319/…
log1000

5

Stetho다음을 build.gradle파일 에 추가하여 라는 매우 멋진 도구를 사용할 수 있습니다 .

compile 'com.facebook.stetho:stetho:1.4.1'

Application또는 Activity onCreate()메서드 내에서 초기화했습니다 .

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    Stetho.initializeWithDefaults(this);
    setContentView(R.layout.activity_main);
}

그런 다음 주소 에서 크롬 의 db 레코드를 볼 수 있습니다 .

chrome://inspect/#devices

자세한 내용은 내 게시물을 읽을 수 있습니다. DB 레코드를 쉽게 보는 방법


4

기기에 따라 adb 셸에서 sqlite3 명령을 찾지 못할 수 있습니다. 이 경우 다음을 따르십시오.

adb 쉘

$ run-as package.name
$ cd ./databases/
$ ls -l # 현재 권한 찾기-r = 4, w = 2, x = 1
$ chmod 666 ./dbname.db
$ exit
$ exit
adb pull / data /data/package.name/databases/dbname.db ~ / Desktop /
adb push ~ / Desktop / dbname.db /data/data/package.name/databases/dbname.db
adb shell
$ run-as package.name
$ chmod 660 ./databases/dbname.db # 원래 권한 복원
$ exit
$ exit

참고로 https://stackoverflow.com/a/17177091/3758972 로 이동 하십시오 .

위의 절차를 수행 한 후 "원격 개체를 찾을 수 없음"이 표시되는 경우가있을 수 있습니다. 그런 다음 adb 쉘에서 데이터베이스 폴더의 권한을 755로 변경하십시오.

$ chmod 755 데이터베이스 /

그러나 21 미만의 Android 버전에서만 작동합니다.


이 작업을 시도했지만 ( "adb shell"로 시작하여 "chmod"를 수행 한 다음 데이터베이스의 "adb pull"을 수행) "adb : error : failed to stat remote object '/ path / to / db': 권한이 거부되었습니다. "오류. 그리고 "chmod 666"은 작동하는 것처럼 보였습니다 (어쨌든 오류는 없었습니다). 이전에는 Android Device Monitor를 사용하여 db 파일을 가져올 수 있었지만 지금 시도하면 초기 "data"디렉토리를 확장 할 수도 없습니다. 에뮬레이터 창이 실행되고 동일한 결과로 실행되지 않는 Android Device Monitor를 사용해 보았습니다. 이건 멍청 하군.
clamum

새로운 해킹으로 모든 데이터 및 네트워크 모니터링 목적으로 stetho 라이브러리를 사용할 수 있습니다. github.com/facebook/stetho
Nitesh Verma

음, 예, Stetho를 사용해야 할 것 같습니다. 전에 권장 사항을 보았지만 SQL 쿼리를 실행할 수 있다는 것을 몰랐으므로 저에게 효과적입니다. 더 이상 Chrome 브라우저를 사용하지 않지만 설치하면 Android db에 대해 검사하고 쿼리 할 수 ​​있다면 그렇게 할 것입니다. Android Device Monitor 방식이 매우 빠르지 않습니다. 어쨌든 db를 가져온 다음 다른 앱에서 열어야합니다. 감사합니다 Nitesh.
clamum
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.