Расположение базы данных sqlite на устройстве - PullRequest
95 голосов
/ 15 декабря 2010

Я создал базу данных sqlite программным способом с расширением по умолчанию SQLiteOpenHelper и переопределением onCreate(). Таким образом, БД создается на лету, когда это необходимо.

Я бы хотел проверить содержимое файла db на моем компьютере с OS X с помощью браузера sqlite. Я знаю имя файла базы данных, но не могу найти его на устройстве. Я подключился к устройству через USB и посмотрел с помощью поиска и терминала, но я просто не могу найти файл БД.

Каково расположение по умолчанию для баз данных sqlite на устройстве Android?

Ответы [ 15 ]

91 голосов
/ 15 декабря 2010

Вы можете найти созданную базу данных с именем <your-database-name>

в

//data/data/<Your-Application-Package-Name>/databases/<your-database-name>

Извлеките ее с помощью проводника и переименуйте ее, чтобы иметь расширение .db3, чтобы использовать ее в SQLiteExplorer

Используйте Проводник файлов DDMS для перехода в каталог эмулятора.

44 голосов
/ 31 октября 2012

Для этого я сделал

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

И для этого ваше приложение должно иметь разрешение на доступ к SD-карте, добавив следующий параметр в ваш manifest.xml

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

Не блестящий способ, но работает.

25 голосов
/ 10 июля 2014

Контекст содержит много функций пути: Context.getXXXPath ()
Одним из них является android.content.Context.getDatabasePath (String dbname), который возвращает абсолютный путь к базе данных с именем dbname.

Context ctx = this; // for Activity, or Service. Otherwise simply get the context.
String dbname = "mydb.db";
Path dbpath = ctx.getDatabasePath(dbname);

Возвращаемый путь в этом случае будет выглядеть примерно так:

/data/data/com.me.myapp/databases/mydb.db

Обратите внимание, что этот путь генерируется автоматически при использовании SQLiteOpenHelper для открытия БД.

23 голосов
/ 15 декабря 2010

Если вы говорите о реальном устройстве, /data/data/<application-package-name> недоступен. У вас должны быть права root ...

16 голосов
/ 17 февраля 2014

Это старый вопрос, но ответы могут помочь другим.

Путь по умолчанию, в котором Android сохраняет базы данных, не может быть принят на нерутированных устройствах. Итак, самый простой способ получить доступ к файлу базы данных (только для сред отладки) - изменить конструктор класса:

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    MySQLiteOpenHelper(Context context) {
        super(context, "/mnt/sdcard/database_name.db", null, 0);
    }
}

Не забудьте изменить для производственных сред с этими линиями:

public class MySQLiteOpenHelper extends SQLiteOpenHelper {
    MySQLiteOpenHelper(Context context) {
        super(context, "database_name.db", null, 0);
    }
}
12 голосов
/ 15 декабря 2010

/data/data/packagename/databases/

е

/data/data/com.example.program/databases/

9 голосов
/ 16 декабря 2010

База данных SQLite - это просто файл.Вы можете взять этот файл, переместить его и даже скопировать в другую систему (например, с телефона на рабочую станцию), и он будет работать нормально.Android хранит файл в каталоге /data/data/packagename/databases/.Вы можете использовать adb command или File Explorer view в Eclipse (Window > Show View > Other... > Android > File Explorer), чтобы просмотреть, переместить или удалить его.

8 голосов
/ 11 декабря 2013

ну, это может быть поздно, но это поможет.Вы можете получить доступ к базе данных без рутирования вашего устройства через adb

, запустить adb с помощью cmd и ввести следующие команды

-run-as com.your.package  
-shell@android:/data/data/com.your.package $ ls  
cache  
databases  
lib  
shared_prefs  

Теперь вы можете открывать с этого момента.

5 голосов
/ 07 июля 2014

Если вы называете свою базу данных как файл без указания пути, то наиболее распространенный способ получить его папку:

final File dbFile = new File(getFilesDir().getParent()+"/databases/"+DBAdapter.DATABASE_NAME);

где DBAdapter.DATABASE_NAME - это просто String, как "mydatabase.db".
Context.getFilesDir() возвращает путь к файлам приложения, например: /data/data/<your.app.packagename>/files/, поэтому вам нужно .getParent()+"/databases/", чтобы удалить "файлы" и вместо этого добавьте «базы данных».
Кстати, Eclipse предупредит вас о жестко закодированной строке «data / data /», но не в этом случае.

3 голосов
/ 21 февраля 2017
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";

И проверьте, хранится ли ваша база данных в Device Storage.Если это так, вы должны использовать разрешение в Manifest.xml:

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...