studio - manual de programacion android pdf
Ubicación de la base de datos sqlite en el dispositivo (15)
He creado una base de datos sqlite mediante programación con la forma predeterminada de extender SQLiteOpenHelper
y anular onCreate()
. De esta forma, el db se crea sobre la marcha cuando es necesario.
Me gustaría comprobar el contenido del archivo db en mi máquina OS X con un navegador sqlite. Sé el nombre del archivo db, pero no puedo encontrarlo en el dispositivo. Me conecté al dispositivo a través de USB y miré con el buscador y la terminal, pero simplemente no puedo encontrar el archivo db.
¿Cuál es la ubicación predeterminada para una base de datos sqlite en un dispositivo Android?
la clase pública MySQLiteOpenHelper extends SQLiteOpenHelper {MySQLiteOpenHelper (Context context) {super (context, "/mnt/sdcard/database_name.db", null, 0); }}
No codificar "/ sdcard /"; use Environment.getExternalStorageDirectory (). getPath () en su lugar
Bueno, esto puede ser tarde, pero ayudará. Puede acceder a la base de datos sin rootear su dispositivo a través de adb
Inicie el adb usando cmd y escriba los siguientes comandos
-run-as com.your.package
-shell@android:/data/data/com.your.package $ ls
cache
databases
lib
shared_prefs
Ahora puedes abrir desde aquí en adelante.
Defina su nombre de base de datos como:
private static final String DATABASE_NAME = "/mnt/sdcard/hri_database.db";
Y puedes ver tu base de datos en:
storage/sdcard0/yourdatabasename.db
El contexto contiene muchas funciones de ruta: Context.getXXXPath ()
Uno de ellos es android.content.Context.getDatabasePath (String dbname) que devuelve la ruta absoluta de una base de datos llamada dbname.
Context ctx = this; // for Activity, or Service. Otherwise simply get the context.
String dbname = "mydb.db";
Path dbpath = ctx.getDatabasePath(dbname);
La ruta devuelta, en este caso, sería algo así como:
/data/data/com.me.myapp/databases/mydb.db
Tenga en cuenta que esta ruta se autogenera si usa SQLiteOpenHelper para abrir el DB.
Esta es una vieja pregunta, pero responder puede ayudar a otros.
La ruta predeterminada donde Android guarda las bases de datos no se puede acceder en dispositivos no rooteados. Entonces, la manera más fácil de acceder al archivo de base de datos (solo para entornos de depuración) es modificar el constructor de la clase:
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
MySQLiteOpenHelper(Context context) {
super(context, "/mnt/sdcard/database_name.db", null, 0);
}
}
Recuerde cambiar los entornos de producción con estas líneas:
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
MySQLiteOpenHelper(Context context) {
super(context, "database_name.db", null, 0);
}
}
Para esto, lo que hice es
File f=new File("/data/data/your.app.package/databases/your_db.db3");
FileInputStream fis=null;
FileOutputStream fos=null;
try
{
fis=new FileInputStream(f);
fos=new FileOutputStream("/mnt/sdcard/db_dump.db");
while(true)
{
int i=fis.read();
if(i!=-1)
{fos.write(i);}
else
{break;}
}
fos.flush();
Toast.makeText(this, "DB dump OK", Toast.LENGTH_LONG).show();
}
catch(Exception e)
{
e.printStackTrace();
Toast.makeText(this, "DB dump ERROR", Toast.LENGTH_LONG).show();
}
finally
{
try
{
fos.close();
fis.close();
}
catch(IOException ioe)
{}
}
Y para hacer esto, su aplicación debe tener permiso para acceder a la tarjeta SD, agregue la siguiente configuración a su manifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
No es una manera brillante, pero funciona.
Puede acceder a él usando adb shell how-to
Contenido del enlace de arriba:
Tutorial: Cómo acceder a una base de datos de Android utilizando una línea de comando. Cuando comience a tratar con una base de datos en su programa, es realmente importante y útil poder acceder directamente, fuera de su programa, para verificar qué acaba de hacer el programa y para depurar.
Y es importante también en Android.
Aquí es cómo hacer eso:
1) Inicie el emulador (o conecte su dispositivo real a su PC). Por lo general, lanzo uno de mis programas de Eclipse para esto. 2) Inicie un símbolo del sistema en el directorio de herramientas de Android. 3) escriba adb shell. Esto lanzará un shell unix en tu emulador / dispositivo conectado. 4) vaya al directorio donde está su base de datos: datos / datos de CD aquí tiene la lista de todas las aplicaciones en su dispositivo Vaya al directorio de su aplicación (¡cuidado, Unix distingue entre mayúsculas y minúsculas!) Cd com.alocaly.LetterGame y desciende en su directorio de bases de datos: bases de datos cd Aquí puede encontrar todas sus bases de datos. En mi caso, solo hay uno (ahora): SCORE_DB 5) Inicie sqlite en la base de datos que desea verificar / cambiar: sqlite3 SCORE_DB Desde aquí, puede verificar qué tablas están presentes: .tables 6) ingrese cualquier instrucción SQL que desee : selecciona * de Puntuación;
Esto es bastante simple, pero cada vez que lo necesito, no sé dónde encontrarlo.
Puede encontrar su base de datos creada, llamada <your-database-name>
en
//data/data/<Your-Application-Package-Name>/databases/<your-database-name>
Tírelo usando File Explorer y renómbrelo para tener la extensión .db3 para usarlo en SQLiteExplorer
Use File explorer de DDMS para navegar al directorio emulator.
Si está hablando de dispositivo /data/data/<application-package-name>
es accesible. Debes tener derechos de root ...
Si nombra su base de datos como un archivo sin dar una ruta, la forma más común de obtener su carpeta es como:
final File dbFile = new File(getFilesDir().getParent()+"/databases/"+DBAdapter.DATABASE_NAME);
donde DBAdapter.DATABASE_NAME
es solo una String
como "mydatabase.db".
Context.getFilesDir()
devuelve la ruta para los archivos de la aplicación como: /data/data/<your.app.packagename>/files/
por eso es necesario .getParent()+"/databases/"
, para eliminar "archivos" y agregar "bases de datos" en su lugar.
BTW Eclipse le advertirá sobre la cadena de "datos / datos /" codificados, pero no en este caso.
Si su aplicación crea una base de datos, esta base de datos se guarda de manera predeterminada en el directorio DATA/data/APP_NAME/databases/FILENAME.
Las partes del directorio anterior se construyen en base a las siguientes reglas. DATA es la ruta que devuelve el método Environment.getDataDirectory (). APP_NAME es el nombre de tu aplicación. FILENAME es el nombre que especifica en el código de su aplicación para la base de datos.
También puede verificar si su IDE tiene una utilidad como la perspectiva DDMS de Eclipse que le permite navegar por el directorio y / o copiar archivos hacia y desde el emulador o un dispositivo rooteado.
Una base de datos SQLite es solo un archivo. Puede tomar ese archivo, moverlo e incluso copiarlo a otro sistema (por ejemplo, desde su teléfono a su estación de trabajo), y funcionará bien. Android almacena el archivo en el directorio /data/data/packagename/databases/
. Puede usar el adb command
o la File Explorer view
en Eclipse ( Window > Show View > Other... > Android > File Explorer
) para ver, mover o eliminar.
/data/data/packagename/databases/
es decir
/data/data/com.example.program/databases/
By Default it stores to:
String DATABASE_PATH = "/data/data/" + PACKAGE_NAME + "/databases/" + DATABASE_NAME;
Where:
String DATABASE_NAME = "your_dbname";
String PACKAGE_NAME = "com.example.your_app_name";
Y compruebe si su base de datos está almacenada en el Almacenamiento del dispositivo. Si es así, debe usar el permiso en Manifest.xml:
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />