Cómo usar ADB en Android Studio para ver una base de datos SQLite

83

Necesito ver mi base de datos SQLite pero no sé cómo hacerlo. Fui a http://www.sqlite.org/download.html y descargué el shell de la línea de comandos para mi sistema operativo, pero cuando ejecuto el programa y escribo adb ..., obtengo errores.

Nota: Estoy usando Android Studio, así que supongo que no necesito instalar nada adicional porque recuerdo que Android Studio dijo que tenía todas las herramientas SDK necesarias.

Terence Chow
fuente

Respuestas:

160

La forma más fácil: conectarse a Sqlite3 a través de ADB Shell

No he encontrado ninguna forma de hacerlo en Android Studio, pero accedo a la base de datos con un shell remoto en lugar de extraer el archivo cada vez.

Encuentre toda la información aquí: http://developer.android.com/tools/help/sqlite3.html

1- Vaya a la carpeta de herramientas de su plataforma en un símbolo del sistema

2- Ingrese el comando adb devicespara obtener la lista de sus dispositivos

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

3- Conecta una carcasa a tu dispositivo:

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

4a- Puede omitir este paso en un dispositivo rooteado

run-as <your-package-name> 

4b- Navegue a la carpeta que contiene su archivo db:

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

5- ejecute sqlite3 para conectarse a su base de datos:

sqlite3 <your-db-name>.db

6- ejecute los comandos sqlite3 que le gusten, por ejemplo:

Select * from table1 where ...;

Nota: Encuentre más comandos para ejecutar a continuación.

Hoja de referencia de SQLite

Hay algunos pasos para ver las tablas en una base de datos SQLite:

  1. Enumere las tablas en su base de datos:

    .tables
    
  2. Enumere cómo se ve la mesa:

    .schema tablename
    
  3. Imprime la tabla completa:

    SELECT * FROM tablename;
    
  4. Enumere todos los comandos de solicitud de SQLite disponibles:

    .help
    
Dheeraj Bhaskar
fuente
1
¿Este método requiere root?
tomislav2012
1
@ tomislav2012 sí, ya que vas al /data/datadirectorio
Dheeraj Bhaskar
1
El comando sqlite3 no se reconoce en mi HTC One S con Android 4.1
Alex
@Alex Sugeriría encontrar sqlite3 e instalarlo si es posible, el desarrollo es más simple con él
Dheeraj Bhaskar
1
Gracias. En caso de que desee transferir el archivo sqlite al escritorio de su computadora, primero puede hacerlo cp /data/data/<your-package-name>/databases/<your-db-name>.db /sdcard. Luego, use un administrador de archivos como Explorer para enviar el archivo a su correo electrónico. :)
Cheok Yan Cheng
76

La forma más fácil para mí es usar Android Device Monitor para obtener el archivo de base de datos y el navegador SQLite DataBase para ver el archivo mientras sigo usando Android Studio para programar Android.

1) Ejecute e inicie la aplicación de base de datos con el emulador de Android desde Android Studio. (Inserté algunos datos en la aplicación de base de datos para verificar)

2) Ejecute el Monitor de dispositivo Android. ¿Como correr?; Ir a [your_folder] > sdk >tools. Puede ver monitor.bat en esa carpeta. shift + right clickdentro de la carpeta y seleccione " Open command window here". Esta acción iniciará el símbolo del sistema. type monitory se iniciará el Monitor de dispositivo Android.

3) Seleccione el emulador que está ejecutando actualmente. Luego ve adata>data>[your_app_name]>databases

4) Haga clic en el ícono (ubicado en la esquina superior derecha) (coloque el cursor sobre el ícono y verá "extraer un archivo del dispositivo") y guárdelo en cualquier lugar que desee

5) Inicie el navegador SQLite DataBase. Arrastre y suelte el archivo que acaba de guardar en ese navegador.

6) Vaya a la Browse Datapestaña y seleccione su tabla para ver.

ingrese la descripción de la imagen aquí ingrese la descripción de la imagen aquí

aknay
fuente
9
Creo que no puede abrir el directorio de datos desde Device Monitor, al menos no puedo hacerlo.
Estevex
6
No puede abrir el directorio de datos en un dispositivo no rooteado, pero puede hacerlo en un emulador.
Tad
3
¿Cómo abrir datos en un dispositivo no rooteado?
Sujith Manjavana
4
Mientras el emulador se está ejecutando, puede descargar archivos de Android emulado usando adb. Ejemplo: adb pull /data/data/com.yourpackagename.here/databases/yourdbfile.db
Baker
Creo que @SujithManjavana está hablando de simplemente abrir la base de datos sqlite desde DataBase Browser mientras estaba en la ruta del emulador en el sistema operativo invitado. No después de copiar de nuevo al sistema operativo host.
Pradeep Sanjaya
14

El problema que tiene es común y no se explica bien en la documentación. Los dispositivos normales no incluyen el binario de la base de datos sqlite3, razón por la cual recibe un error. Android Emeulator, OSX, Linux (si está instalado) y Windows (después de instalado) tienen el binario para que pueda abrir una base de datos localmente en su máquina.

La solución alternativa es copiar la base de datos de su dispositivo a su máquina local. Esto se puede lograr con ADB pero requiere varios pasos.

Antes de comenzar, necesitará información:

  • ruta del SDK (si no está incluido en el entorno de su sistema operativo)
  • tu <package name>, por ejemplo,com.example.application
  • a <local path>para colocar su base de datos, por ejemplo. ~/Desktopo%userprofile%\Desktop

A continuación, deberá comprender en qué terminal se escribe cada comando en el primer carácter en los ejemplos a continuación que no se escribe, pero le permite saber en qué shell estamos:

  • > = el símbolo del sistema de su sistema operativo
  • $ = Símbolo del sistema de shell ADB
  • ! = Shell ADB como símbolo del sistema de administración
  • %

Luego ingrese los siguientes comandos desde la Terminal o Comando (no ingrese el primer carácter o texto ())

> 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)

Esta es una forma realmente redonda de copiar la base de datos a su máquina local y leer localmente la base de datos. Hay SO y otros recursos que explican cómo instalar el binario sqlite3 en su dispositivo desde un emulador, pero por una vez, este proceso funciona.

Si necesita acceder a la base de datos de forma interactiva, sugeriría ejecutar su aplicación en un emulador (que ya tenía sqlite3) o instalar sqlite en sus dispositivos / ruta xbin .

hoss
fuente
9
  1. Abre una terminal
  2. cd <ANDROID_SDK_PATH>(para mí en Windows cd C:\Users\Willi\AppData\Local\Android\sdk)
  3. cd platform-tools
  4. adb shell (esto solo funciona si solo se está ejecutando un emulador)
  5. cd data/data
  6. su (obtenga privilegios de superusuario)
  7. cd <PACKAGE_NAME>/databases
  8. sqlite3 <DB_NAME>
  9. emita sentencias SQL ( importante: termínelas con ;, de lo contrario, la sentencia no se emite y se rompe a una nueva línea).

Nota: Utilice ls(Linux) o dir(Windows) si necesita enumerar el contenido del directorio.

Willi Mentzel
fuente
8

¿Qué menciona mientras escribe 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
log1000
fuente
Bueno ... no sé dónde escribir adb... Cuando lo escribo en el shell SQLite3, me da ...>y espera una continuación de un comando. Básicamente está esperando a ;. Si escribo el punto y coma, obtengo error: near "adb": syntax error... Escribir adb shellen un símbolo del sistema me dice que adb no es un comando reconocido ... ¿Se supone que debo agregar adb a mis archivos de ruta?
Terence Chow
primero: tienes que entrar en adb shell (mac o linux: ejecutar en terminal; windows: ejecutar en cmd); luego ejecutar sqlite3 commond en adb shell.
log1000
1
¿Cómo ejecuto el comando sqlite3 desde el shell de ADB? dice: /system/bin/sh: sqlite3: not found... Y ya agregué SQLite3 y ADB como variables de ruta ...
Terence Chow
¿Qué dispositivo usas? Deseo que esto te dé una pista stackoverflow.com/questions/3645319/…
log1000
5

Puede usar una herramienta muy agradable llamada Stethoagregando esto al build.gradlearchivo:

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

Y lo inicializó dentro de su método Applicationo Activity onCreate():

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

Luego puede ver los registros db en Chrome en la dirección:

chrome://inspect/#devices

Para obtener más detalles, puede leer mi publicación: Cómo ver fácilmente sus registros de base de datos

yshahak
fuente
4

Dependiendo de los dispositivos, es posible que no encuentre el comando sqlite3 en adb shell. En ese caso, es posible que desee seguir esto:

shell adb

$ run-as package.name
$ cd ./databases/
$ ls -l # Encuentra los permisos actuales - 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
$ ejecutar-como paquete.name
$ chmod 660 ./databases/dbname.db #Restaurar los permisos originales
$ exit
$ exit

como referencia, vaya a https://stackoverflow.com/a/17177091/3758972 .

Puede haber casos en los que obtenga "objeto remoto no encontrado" después de seguir el procedimiento anterior. Luego, cambie el permiso de la carpeta de su base de datos a 755 en adb shell.

$ chmod 755 bases de datos /

Pero tenga en cuenta que solo funcionará en la versión de Android <21.

Nitesh Verma
fuente
Intenté esto (comenzando con "adb shell", luego haciendo el "chmod", luego haciendo el "adb pull" de la base de datos) pero obtengo un "adb: error: no se pudo establecer el objeto remoto '/ path / to / db': Permiso denegado "error. Y el "chmod 666" pareció funcionar (de todos modos no hubo ningún error). He podido extraer el archivo db usando Android Device Monitor en el pasado, pero si lo intento ahora, ni siquiera puedo expandir el directorio de "datos" inicial. Probé Android Device Monitor con la ventana del emulador ejecutándose y no con los mismos resultados. Dios, esto es estúpido.
clamum
Como nuevo truco, puede usar la biblioteca stetho para todos los fines de monitoreo de datos y redes. github.com/facebook/stetho
Nitesh Verma
Hmmm, sí, supongo que tendré que usar Stetho. Lo vi recomendado antes, pero no me di cuenta de que podía ejecutar consultas SQL con él, por lo que funcionará para mí. Ya no uso el navegador Chrome, pero si instalarlo me permite inspeccionar y consultar la base de datos de Android, lo haré. No es que la forma del Monitor de dispositivo Android fuera súper rápida, tendrías que extraer la base de datos y luego abrirla en otra aplicación de todos modos. Gracias Nitesh.
clamum