Как просмотреть базу данных SQLite на устройстве Android? [Дубликат]

89

У меня есть набор данных в базе данных SQLite. Мне нужно просмотреть базу данных на устройстве. Как это сделать?

Я проверил режим ddms. Данные в проводнике файлов пусты.

  • 0
    stackoverflow.com/q/18471780/1778421
  • 0
    Попробуйте cordova-sqlite-detools , CLI с открытым исходным кодом, который используется для извлечения базы данных sqlite с подключенного устройства Android. npmjs.com/package/cordova-sqlite-devtools
Показать ещё 3 комментария
Теги:
database
adb

20 ответов

165

Ниже приведены пошаговые инструкции (в основном, взятые из комбинации других ответов). Это работает даже на устройствах, которые не внедрены.

  • Подключите устройство и запустите приложение в режиме отладки.

  • Вы можете использовать adb -d shell "run-as com.yourpackge.name ls /data/data/com.yourpackge.name/databases/" для просмотра имени файла базы данных.

Примечание. com.yourpackge.name - это имя вашего пакета приложений. Вы можете получить его из файла манифеста.

  1. Скопируйте файл базы данных из папки приложения на SD-карту.

    adb -d shell "run-as com.yourpackge.name cat /data/data/com.yourpackge.name/databases/filename.sqlite > /sdcard/filename.sqlite"

Примечание: имя_файла .sqlite - это имя вашей базы данных, которое вы использовали при создании базы данных

  1. Вытащите файлы базы данных на ваш компьютер:

    adb pull /sdcard/filename.sqlite

Это скопирует базу данных с SD-карты на место, где находится ваш ADB.

  1. Установите Firefox SQLite Manager: https://addons.mozilla.org/en-US/firefox/addon/sqlite-manager/

  2. Откройте Firefox SQLite Manager (Tools- > SQLite Manager) и откройте файл базы данных с шага 3 выше.

  3. Наслаждайтесь!

  • 1
    Это сработало, но на шаге 2 мне пришлось заменить одинарные кавычки на двойные. Он не работает с одинарными кавычками, но работает с двойными кавычками (по крайней мере, в Windows).
  • 1
    ADB тянуть / SDCard / будет тянуть всю SDCard. используйте adb pull /sdcard/filename.sqlite
Показать ещё 17 комментариев
51

Лучший способ просмотра и управления вашей базой данных приложений Android - использовать библиотеку DatabaseManager_For_Android.

Это один файл активности Java; просто добавьте его в свою исходную папку. Вы можете просматривать таблицы в базе данных приложений, обновлять, удалять, вставлять строки в таблицу. Все изнутри вашего приложения.

При завершении разработки удалите файл Java из папки src. Что это.

Вы можете просмотреть 5-минутное демо, Менеджер баз данных для Android SQLite Database.

  • 0
    Это можно использовать для просмотра любой базы данных (в sqllite) или только той, которая создана вашим приложением?
  • 0
    Только тот, который создан вашим приложением
Показать ещё 2 комментария
48

Взятый здесь, вы можете попробовать:

  • Facebook с открытым исходным кодом Stetho library

В build.gradle:

dependencies {
  // Stetho core
  compile 'com.facebook.stetho:stetho:1.5.0'        
  //If you want to add a network helper
  compile 'com.facebook.stetho:stetho-okhttp:1.5.0'
}

Инициализировать библиотеку в объекте приложения:

Stetho.initializeWithDefaults(this);

И вы можете просмотреть свою базу данных в Chrome от chrome://inspect

  1. Другой вариант этот плагин (не бесплатный)
  2. И последняя является бесплатной/открытой исходной библиотекой для просмотра содержимого db в браузере https://github.com/amitshekhariitbhu/Android-Debug-Database
  • 0
    как использовать Stetho в затмении?
  • 1
    После ввода URL-адреса проверки мне было нелегко увидеть, как получить доступ к БД. Вот как - после загрузки URL-адреса, когда ваше приложение уже запущено, на загруженной странице приложения появится ссылка / ссылка с текстом для inspect . Нажмите на эту ссылку .. затем для доступа к БД: 1) Наблюдайте, как из браузера открывается всплывающее окно «Инструменты разработчика», 2) Перейдите на вкладку « Resources », 3) Базы данных находятся под Web SQL в левом меню.
Показать ещё 1 комментарий
25

Лучший способ, который я нашел до сих пор, - использовать инструмент Android-Debug-Database.

Его невероятно прост в использовании и настройке, просто добавьте зависимость и подключитесь к интерфейсу базы данных устройства через Интернет. Не нужно укорачивать телефон или добавлять действия или что-то еще. Вот шаги:

ШАГ 1

Добавьте следующую зависимость к файлу приложения gradle и запустите приложение.

debugCompile 'com.amitshekhar.android:debug-db:1.0.0'

ШАГ 2

Откройте браузер и перейдите на IP-адрес вашего телефона на порт 8080. URL-адрес должен выглядеть следующим образом: http://YOUR_PHONE_IP_ADDRESS:8080. Вам будет предложено следующее:

Изображение 1131

Чтобы получить myphone IP, я в настоящее время использую Ping Tools, но есть много альтернатив.

ШАГ 3

Что это!


Подробнее в официальных документах: https://github.com/amitshekhariitbhu/Android-Debug-Database

  • 0
    спасибо, теперь я могу получить sqlite удаленно. Это работа для публичного выступления тоже?
  • 0
    Если вы получите 0.0.0.0:8080, используйте опцию adb forward, указанную выше.
Показать ещё 3 комментария
14

Если вы используете реальное устройство и оно не внедрено, тогда вы не можете увидеть свою базу данных в FileExplorer, потому что из-за некоторой причины безопасности эта папка заблокирована в системе Android. И если вы используете его в эмуляторе, вы найдете его в FileExplorer, /data/data/вашем имени пакета/databases/yourdatabse.db.

  • 3
    Я рутировал, но данные в проводнике по-прежнему пустые
  • 0
    что означает рутинг @Abhijit?
Показать ещё 1 комментарий
11

Вы можете сделать это:

  • adb shell
  • cd /go/to/databases
  • sqlite3 database.db
  • В командной строке sqlite> введите .tables. Это даст вам все таблицы в файле database.db.
  • select * from table1;
  • 1
    Это работает. Путь это /data/data/COM.YOUR_PACKAGE.NAME/databases где COM.YOUR_PACKAGE.NAME - это имя пакета, который вы хотите просмотреть в своих базах данных. Номер 4 не работал, хотя.
  • 0
    Спасибо Махса Мохаммадхани, обновил шаг 4, как вы упомянули на шаге 2, путь - это путь к данным приложения.
Показать ещё 4 комментария
8

Попробуйте AndroidDBvieweR!

  • Не нужно, чтобы ваше устройство было ROOTED.
  • Не нужно импортировать файл базы данных приложения
  • Несколько конфигураций, и вам хорошо идти!

Изображение 1132

  • 2
    Хорошее приложение, но вам нужно добавить зависимость в файл build.gradle приложения.
  • 1
    Которое добавление зависимости занимает всего 5 секунд. Большое спасибо, Питер, это великолепно!
Показать ещё 1 комментарий
5

Если вы не хотите использовать

  • ADB
  • сторонняя библиотека или
  • gradle зависимость и т.д.

и просто хотите, чтобы файл базы данных находился в SDCard, это решение.

скопируйте класс DatabaseUtil.java в свой проект

package com.util;

import android.content.Context;
import android.os.Environment;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.nio.channels.FileChannel;

/**
 * Shayan Rais (http://shanraisshan.com)
 * created on 8/17/2016
 */
public class DatabaseUtil {
    //You need to declare permission
    // <uses-permission     android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    //in your Manifest file in order to use this class

    //______________________________________________________________________________________________

    //todo -> rename the database according to your application
    final static String DATABASE_NAME = "MyDatabase.sqlite";
    //example WhatsApp :  /data/data/com.whatsapp/databases/msgstore.db
    final static String FOLDER_EXTERNAL_DIRECTORY = Environment.getExternalStorageDirectory() + "/shanraisshan";

    //______________________________________________________________________________________________
    public static void copyDatabaseToExtStg(Context ctx) {
        //external storage file
        File externalDirectory = new File(FOLDER_EXTERNAL_DIRECTORY);
        if(!externalDirectory.exists())

        .
        .

и просто вызовите метод copyDatabaseToExtStg() из любой активности вашего приложения.


это скопирует папку базы данных по адресу sdcard/shanraisshan/your_database_file

Изображение 1133


Для дальнейшего подробного объяснения проверьте Android-Database-Viewer на Github. https://github.com/shanraisshan/Android-Database-Viewer

4

Хотя эта база данных напрямую не просматривается на вашем устройстве, я опубликовал простую оболочку script для сброса баз данных на локальную машину:

https://github.com/Pixplicity/dbdump

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

  • Сначала он пытается сделать файл доступным для других пользователей и пытается вытащить его с устройства.
  • Если это не удается, оно передает содержимое файла через терминал на локальный компьютер. Он выполняет дополнительный трюк, чтобы удалить символы \r, которые некоторые устройства выводят в оболочку.

Здесь вы можете использовать различные приложения CLI или GUI SQLite, такие как sqlite3 или sqlitebrowser, для просмотра содержимого базы данных.

  • 0
    очень сбит с толку ... вы должны объяснить, куда помещать ваши файлы и как выполнять эти команды ... Я сделал копирование / вставку в своем проекте, откройте cmd и запустите humpty.sh -d com.mypak.name databases/MyDB.db это говорит Succes! ... но в папке dumps / com.mypak.name / database есть просто bat-файл, который говорит ведьма: run-as: Package 'com.mypak.name' is unknown
  • 0
    @ Choleski Это не должно быть вывод командного файла, который звучит как ошибка. Как вы выполняете сценарий оболочки в Windows? Через cygwin или mingw? Что касается извлечения базы данных, вы можете выполнить команды через оболочку adb самостоятельно, чтобы увидеть, поддерживает ли ваше устройство run-as .
Показать ещё 1 комментарий
3

шаг 1 Скопируйте этот класс в свой пакет

шаг 2поместите следующий код в свой класс, который расширяет SQLiteOpenHelper.

 //-----------------for show databasae table----------------------------------------

public ArrayList<Cursor> getData(String Query)
{
    //get writable database
    SQLiteDatabase sqlDB =this.getWritableDatabase();
    String[] columns = new String[] { "mesage" };
    //an array list of cursor to save two cursors one has results from the query
    //other cursor stores error message if any errors are triggered
    ArrayList<Cursor> alc = new ArrayList<Cursor>(2);
    MatrixCursor Cursor2= new MatrixCursor(columns);
    alc.add(null);
    alc.add (null);


    try{
        String maxQuery = Query ;
        //execute the query results will be save in Cursor c
        Cursor c = sqlDB.rawQuery(maxQuery, null);

        //add value to cursor2
        Cursor2.addRow(new Object[] { "Success" });

        alc.set(1,Cursor2);
        if (null != c && c.getCount() > 0)
        {
            alc.set(0,c);
            c.moveToFirst();
            return alc ;
        }
        return alc;
    }
    catch(SQLException sqlEx)
    {
        Log.d("printing exception", sqlEx.getMessage());
        //if any exceptions are triggered save the error message to cursor an return the arraylist
        Cursor2.addRow(new Object[] { ""+sqlEx.getMessage() });
        alc.set(1,Cursor2);
        return alc;
    }
    catch(Exception ex)
    {
        Log.d("printing exception",ex.getMessage());
        //if any exceptions are triggered save the error message to cursor an return the arraylist
        Cursor2.addRow(new Object[] { ""+ex.getMessage() });
        alc.set(1,Cursor2);
        return alc;
    }
}

шаг 3зарегистрироваться в манифесте

<activity
        android:name=".database.AndroidDatabaseManager"
        android:screenOrientation="portrait"
        android:theme="@style/AppTheme.NoActionBar"/>

шаг 4

Intent i = new Intent(this, AndroidDatabaseManager.class);
startActivity(i);
3

Надеюсь, это поможет вам

Использование терминала Сначала укажите местоположение, в котором sdk andriod запущен

eg: C:\Users\AppData\Local\Android\sdk\platform-tools>

затем проверьте список подключенных устройств. Используя

 adb devices

а затем запустите эту команду, чтобы скопировать файл с устройства в вашу систему.

adb -s YOUR_DEVICE_ID shell run-as YOUR_PACKAGE_NAME chmod -R 777 /data/data/YOUR_PACKAGE_NAME/databases && adb -s YOUR_DEVICE_ID shell "mkdir -p /sdcard/tempDB" && adb -s YOUR_DEVICE_ID shell "cp -r /data/data/YOUR_PACKAGE_NAME/databases/ /sdcard/tempDB/." && adb -s YOUR_DEVICE_ID pull sdcard/tempDB/ && adb -s YOUR_DEVICE_ID shell "rm -r /sdcard/tempDB/*"

Вы можете найти файл базы данных по этому пути

 Android\sdk\platform-tools\tempDB\databases
3

попробуйте facebook Stetho.

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

https://github.com/facebook/stetho

3

Я использую SQLite Database Browser, чтобы увидеть содержимое SQLite DB в Android-разработке. Сначала вы должны вывести файл базы данных с устройства, а затем открыть его в SQLite DB Browser.

  • 0
    Мне нужно, где файл базы данных присутствует. Я проверил его в проводнике, но данные пустые. Затем, где взять файл базы данных.
  • 0
    Вы используете эмулятор или реальное устройство? Если на реальном устройстве, то я думаю, что DDMS не будет перечислять внутреннее хранилище (включая / data). Однако вы можете использовать adb pull path_to_db_file_in_device path_to_save чтобы сохранить его на компьютере.
Показать ещё 3 комментария
2

Вы можете попробовать SQLiteOnWeb. Он управляет вашей базой данных SQLite в браузере.

  • 0
    Я не могу получить gradle для разрешения зависимостей, перечисленных в файле readme этого проекта
  • 0
    О ~, не могли бы вы сказать мне, какую ошибку вы получаете?
Показать ещё 2 комментария
2

Это работает с Android 6.0 (отладочные приложения как минимум):

adb shell "run-as your.package.name cp /data/data/your.package.name/databases/you-db-name  /sdcard/file_to_write"

Тогда вы просто можете просмотреть БД с помощью aSQLiteManager, например.

2

Выполните следующие действия.

1 > Загрузите файл *.jar из здесь.

2 > Поместите файл *.jar в папку eclipse/dropins/и перезапустите eclipse.

3 > В правом верхнем углу затмения щелкните значок DDMS.

4 Выберите правильный эмулятор на левой панели.

5 На вкладке "Проводник" на главной панели перейдите в /data/data/ [YOUR.APP.NAMESPACE]/databases.

6 Под значком DDMS должен быть новый синий значок базы данных при выборе вашей базы данных. Щелкните по нему, и вы увидите вкладку Questoid Sqlite Manager, открывающуюся для просмотра ваших данных.

* Примечание. Если база данных не загорается, возможно, это связано с тем, что в вашей базе данных нет расширения *.db. Убедитесь, что ваша база данных называется [DATABASE_NAME].db

* Примечание: если вы хотите использовать БД без расширения .db-Extension:

-Загрузить этот Questoid SqLiteBrowser: Загрузить здесь.

-Unzip и поместите его в eclipse/dropins (не плагины).

-Проверьте это для получения дополнительной информации Нажмите здесь.

1

Существует TKlerx Android-браузер SQLite для Eclipse, и он полностью функциональен вместе с Android Studio. Я рекомендую это, потому что это очень практично.

Чтобы установить его на Device Monitor, просто поместите JAR файл в [Path to Android SDK folder]/sdk/tools/lib/monitor-[...]/plugins.

0

Первое сообщение (https://stackoverflow.com/questions/19194576/how-do-i-view-the-sqlite-database-on-an-android-device) для меня не работает.

Я написал собственный script для получения файла DB с устройства. Без корня. Работает нормально.

  • Скопируйте script в каталог с помощью adb (например: ~/android-sdk/platform-tools).
  • Устройство должно быть подключено к ПК.
  • Используйте ./getDB.sh -p <packageName> для получения имени базы данных.

Использование: ./getDB.sh -p <packageName> -n <name of DB> -s <store in mobile device> для получения файла DB для этого (где выполняется script).

Я рекомендую вам установить имя файла DB как *.sqlite и открыть его с помощью Firefox addon: SQLite Manager.

(Это долгое время, когда я написал что-то в Bash. Вы можете отредактировать этот код.)

#!/bin/sh
# Get DB from Android device.
#

Hoption=false
Poption=false
Noption=false
Soption=false
Parg=""
Narg=""
Sarg=""

#-----------------------FUNCTION--------------------------:
helpFunc(){ #help
echo "Get names of DB files in your Android app.
Usage: ./getDB -h
       ./getDB -p packageName -n nameOfDB -s storagePath
Options:
   -h                                           Show help.
   -p packageName                               List of databases for package name.
   -p packageName -n nameOfDB -s storagePath    Save DB from device to this directory."
}


#--------------------------MAIN--------------------------:
while getopts 'p:n:s:h' options; do
    case $options in

        p) Poption=true
            Parg=$OPTARG;;

        n) Noption=true
            Narg=$OPTARG;;

        s) Soption=true
            Sarg=$OPTARG;;

        h) Hoption=true;;
    esac
done

#echo "-------------------------------------------------------
#Hoption: $Hoption
#Poption: $Poption
#Noption: $Noption
#Soption: $Soption
#Parg: $Parg
#Narg: $Narg
#Sarg: $Sarg
#-------------------------------------------------------"\\n
#echo $#    #count of params

if [ $Hoption = true ];then
    helpFunc
elif [ $# -eq 2 -a $Poption = true ];then #list
    ./adb -d shell run-as $Parg ls /data/data/$Parg/databases/
    exit 0
elif [ $# -eq 6 -a $Poption = true -a $Noption = true -a $Soption = true ];then #get DB file
    #Change permissions
    ./adb shell run-as $Parg chmod 777 /data/data/$Parg/databases/
    ./adb shell run-as $Parg chmod 777 /data/data/$Parg/databases/$Narg
    #Copy
    ./adb shell cp /data/data/$Parg/databases/$Narg $Sarg
    #Pull file to this machine
    ./adb pull $Sarg/$Narg
    exit 0
else
    echo "Wrong params or arguments. Use -h for help."
    exit 1;
fi

exit 0;
0

Я нашел очень простой библиотечный stetho для просмотра sqlite db приложения в chrome, см.

0

Используя проводник файлов, вы можете найти файл своей базы данных следующим образом:

data-->data-->your.package.name-->databases--->yourdbfile.db

Затем вы можете использовать любой SQLite для изучения вашей базы данных. Я использую аддон SQLite Manager Firefox. Это приятно, мало и быстро.

  • 0
    Это работает только для эмулятора?
  • 0
    Для рутованного устройства тоже работает нормально
Показать ещё 4 комментария

Ещё вопросы

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