Я создал базу данных sqlite программно со способом по умолчанию SQLiteOpenHelper
и переопределением onCreate()
. Таким образом, db создается на лету, когда это необходимо.
Я хочу проверить содержимое файла db на моей машине OS X с помощью браузера sqlite. Я знаю имя файла db, но я не могу найти его на устройстве. Я подключился к устройству через USB и посмотрел с помощью finder и терминала, но я просто не могу найти файл db.
Каково местоположение по умолчанию для баз данных sqlite на устройстве Android?
Вы можете найти созданную вами базу данных с именем <your-database-name>
в
//data/data/<Your-Application-Package-Name>/databases/<your-database-name>
Извлеките его с помощью File Explorer и переименуйте его, чтобы иметь расширение .db3, чтобы использовать его в SQLiteExplorer
Используйте проводник файлов DDMS для перехода в каталог эмулятора.
700
. Вам нужны права суперпользователя, чтобы увидеть это.
Для этого я сделал
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" />
Не блестящий способ, но работает.
Контекст содержит много функций пути: 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 для открытия БД.
Если вы говорите о реальном устройстве, /data/data/<application-package-name>
недоступен. У вас должны быть права root...
Это старый вопрос, но ответ может помочь другим.
Путь по умолчанию, в котором 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);
}
}
Failed to open database '/mnt/sdcard/itens'.
в Logcat
/data/data/packagename/databases/
т
/data/data/com.example.program/databases/
Хорошо, что это может быть поздно, но это поможет. Вы можете получить доступ к базе данных без, укореняя ваше устройство через adb
запустите adb с помощью cmd и введите следующие команды
-run-as com.your.package
-shell@android:/data/data/com.your.package $ ls
cache
databases
lib
shared_prefs
Теперь вы можете открыть здесь.
База данных SQLite - это всего лишь файл. Вы можете взять этот файл, переместить его и даже скопировать в другую систему (например, с телефона на рабочую станцию), и он будет работать нормально. Android хранит файл в каталоге /data/data/packagename/databases/
. Вы можете использовать adb command
или File Explorer view
в Eclipse (Window > Show View > Other... > Android > File Explorer
) для просмотра, перемещения или удаления.
Если вы назовете свой 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 предупредит вас о жестко закодированной строке "данные/данные/", но не в этом случае.
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" />
Вы можете получить к нему доступ с помощью оболочки 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;
Это довольно просто, но каждый раз, когда мне это нужно, я не знаю, где найти его.
открытый класс MySQLiteOpenHelper расширяет SQLiteOpenHelper { MySQLiteOpenHelper (контекст контекста) { super (context, "/mnt/sdcard/database_name.db", null, 0); }}
Не печатать "/sdcard/"; вместо этого используйте Environment.getExternalStorageDirectory(). getPath() вместо
Если ваше приложение создает базу данных, эта база данных по умолчанию сохраняется в каталоге DATA/data/APP_NAME/databases/FILENAME.
Части вышеуказанного каталога построены на основе следующих правил. DATA - это путь, возвращаемый методом Environment.getDataDirectory(). APP_NAME - ваше имя приложения. FILENAME - это имя, указанное в коде приложения для базы данных.
Определите имя своей базы данных, например:
private static final String DATABASE_NAME = "/mnt/sdcard/hri_database.db";
И вы можете увидеть свою базу данных в:
storage/sdcard0/yourdatabasename.db
Вы также можете проверить, есть ли у вашей IDE такая утилита, как перспектива Eclipse DDMS, которая позволяет вам просматривать каталог и/или копировать файлы в эмулятор или из корневого устройства и из него.