Расположение базы данных sqlite на устройстве

75

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

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

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

Теги:

15 ответов

80

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

в

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

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

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

  • 1
    Когда я пытаюсь сделать это в эмуляторе, я могу перейти к / data. Но когда я пытаюсь сделать это с моим подключенным Galaxy Vibrant, я не могу перейти к / data. В этих двух случаях сервер adb работает по-разному?
  • 41
    У вас нет доступа к папке / data на реальном телефоне. Это chmoded 700 . Вам нужны права суперпользователя, чтобы увидеть это.
Показать ещё 3 комментария
39

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

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-карте, добавьте следующую настройку в свой манифест. xml

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

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

  • 0
    Ницца. Я искал это. Можно также выбрать загрузку полной базы данных на сервер для анализа таким способом.
  • 3
    если это не работает ... используйте имя базы данных "/data/data/your.app.package/databases/your_db" Просто удалите расширение ".db3"
Показать ещё 2 комментария
21

Контекст содержит много функций пути: 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 для открытия БД.

17

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

  • 0
    Это не совсем так. Это не просматривается , но доступность файлов внутри зависит от их отдельных битов разрешения.
  • 0
    Мой телефон рутирован. Как я могу "просмотреть" папку данных?
Показать ещё 3 комментария
14

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

Путь по умолчанию, в котором 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);
    }
}
  • 0
    Я попробовал это и возвратил ошибку Failed to open database '/mnt/sdcard/itens'. в Logcat
  • 1
    Я так виноват. Этому ответу четыре года. И ОП старше этого (2010). В настоящее время Android значительно отличается от 2010 года. Поэтому расположение базы данных может быть другим. Извините, я не могу вам больше помочь.
Показать ещё 1 комментарий
10

/data/data/packagename/databases/

т

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

8

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

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

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

Теперь вы можете открыть здесь.

  • 4
    Да, для отладки APK. Нет, для производственного (или на выпусках Android, где run-as не работает).
8

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

4

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

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/", чтобы удалить "файлы", и вместо этого добавьте "базы данных".
BTW Eclipse предупредит вас о жестко закодированной строке "данные/данные/", но не в этом случае.

2
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";

И проверьте, сохранена ли ваша база данных в хранилище устройств. Если так, вы должны использовать разрешение в Manifest.xml:

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

Вы можете получить к нему доступ с помощью оболочки adb how-to

Содержимое из приведенной выше ссылки:

Учебное пособие. Как получить доступ к базе данных Android с помощью командной строки. Когда вы начинаете работать с базой данных в своей программе, это действительно важно и полезно иметь доступ к нему напрямую, вне программы, чтобы проверить, что программа только что сделала, и отладить.

И это также важно и на Android.

Вот как это сделать:

1) Запустите эмулятор (или подключите свое реальное устройство к компьютеру). я обычно запускайте одну из моих программ из Eclipse для этого. 2) Запустите командной строки в каталоге инструментов Android. 3) тип оболочки adb. Эта запустит оболочку unix на вашем эмуляторе/подключенном устройстве. 4) пойти в каталог, в котором находится ваша база данных: данные/данные cd здесь список всех приложений на вашем устройстве Перейти в приложение каталог (будьте осторожны, Unix чувствителен к регистру!!) cd com.alocaly.LetterGame и спуск в вашем каталоге баз данных: cd базы данных Здесь вы можете найти все свои базы данных. В моем случае есть только один (сейчас): SCORE_DB 5) Запустите sqlite в базе данных, которую вы хотите для проверки/изменения: sqlite3 SCORE_DB Здесь вы можете проверить, что таблицы:.tables 6) введите любую требуемую команду SQL: выберите * from Score;

Это довольно просто, но каждый раз, когда мне это нужно, я не знаю, где найти его.

0

открытый класс MySQLiteOpenHelper расширяет SQLiteOpenHelper {     MySQLiteOpenHelper (контекст контекста) {         super (context, "/mnt/sdcard/database_name.db", null, 0);     }}

Не печатать "/sdcard/"; вместо этого используйте Environment.getExternalStorageDirectory(). getPath() вместо

0

Если ваше приложение создает базу данных, эта база данных по умолчанию сохраняется в каталоге DATA/data/APP_NAME/databases/FILENAME.

Части вышеуказанного каталога построены на основе следующих правил. DATA - это путь, возвращаемый методом Environment.getDataDirectory(). APP_NAME - ваше имя приложения. FILENAME - это имя, указанное в коде приложения для базы данных.

0

Определите имя своей базы данных, например:

private static final String DATABASE_NAME = "/mnt/sdcard/hri_database.db";

И вы можете увидеть свою базу данных в:

storage/sdcard0/yourdatabasename.db
0

Вы также можете проверить, есть ли у вашей IDE такая утилита, как перспектива Eclipse DDMS, которая позволяет вам просматривать каталог и/или копировать файлы в эмулятор или из корневого устройства и из него.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню