Форум программистов, компьютерный форум CyberForum.ru

Как работать с файлом .db? - Android

Войти
Регистрация
Восстановить пароль
 
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
14.12.2015, 16:17     Как работать с файлом .db? #1
У меня есть права рут на телефоне. Я копировал файл .db приложения из data/data на SD Card и как я теперь могу программно прочитать содержимое этого файла??Обычно через Cursor или как?? Я просто знаю как при помощи SQLiteOpenHelper создать базу данных SQLite и через Cursor в приложении ее прочитать. Так вот а если есть просто файл db приложения(доступ к нему есть), данные там не в зашифрованном виде и я хочу в своем приложении открыть и прочитать этот файл. Что для этого нужно делать ?? Как открыть для чтения этот db файл(какую функцию использовать) и как потом прочитать данные. Можете подсказать идею?? И как можно вообще открыть db файл, чтобы посмотреть что там есть?? Какой просмотрщик для этого использовать??
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Ssnake707
 Аватар для Ssnake707
8 / 8 / 6
Регистрация: 02.02.2015
Сообщений: 137
17.12.2015, 00:18     Как работать с файлом .db? #2
yura91, Если ты знаешь как работать с БД в Android, то попробуй сделать следующее:
- Создай класс для работы с БД, но т.к. ты не создаешь БД, а используешь уже существующую, то в этом классе опиши метод который будет копировать БД из папки Assets твоего приложения в папку где приложение хранит бд, а дальше открывай её и читай.
- Если ты хочешь просто ее прочитать, то скопируй БД на ПК и открой с помощью SqliteBrowser
Думаю понятно объяснил
dajver
 Аватар для dajver
406 / 270 / 18
Регистрация: 18.09.2010
Сообщений: 1,106
17.12.2015, 01:42     Как работать с файлом .db? #3
Нашел на просторах, должно работать. Тольно не бездумно вставляйте и говорите что не работает, а подставьте везде свое название файла, расширение и package неймы.
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
public class DataBaseHelper extends SQLiteOpenHelper {
    private Context mycontext;
 
    //private String DB_PATH = mycontext.getApplicationContext().getPackageName()+"/databases/";
    private static String DB_NAME = "(datbasename).sqlite";//the extension may be .sqlite or .db
    public SQLiteDatabase myDataBase;
    /*private String DB_PATH = "/data/data/"
                        + mycontext.getApplicationContext().getPackageName()
                        + "/databases/";*/
 
    public DataBaseHelper(Context context) throws IOException {
        super(context,DB_NAME,null,1);
        this.mycontext=context;
        boolean dbexist = checkdatabase();
        if (dbexist) {
            //System.out.println("Database exists");
            opendatabase(); 
        } else {
            System.out.println("Database doesn't exist");
            createdatabase();
        }
    }
 
    public void createdatabase() throws IOException {
        boolean dbexist = checkdatabase();
        if(dbexist) {
            //System.out.println(" Database exists.");
        } else {
            this.getReadableDatabase();
            try {
                copydatabase();
            } catch(IOException e) {
                throw new Error("Error copying database");
            }
        }
    }   
 
    private boolean checkdatabase() {
        //SQLiteDatabase checkdb = null;
        boolean checkdb = false;
        try {
            String myPath = DB_PATH + DB_NAME;
            File dbfile = new File(myPath);
            //checkdb = SQLiteDatabase.openDatabase(myPath,null,SQLiteDatabase.OPEN_READWRITE);
            checkdb = dbfile.exists();
        } catch(SQLiteException e) {
            System.out.println("Database doesn't exist");
        }
        return checkdb;
    }
 
    private void copydatabase() throws IOException {
        //Open your local db as the input stream
        InputStream myinput = mycontext.getAssets().open(DB_NAME);
 
        // Path to the just created empty db
        String outfilename = DB_PATH + DB_NAME;
 
        //Open the empty db as the output stream
        OutputStream myoutput = new FileOutputStream("/data/data/(packagename)/databases   /(datbasename).sqlite");
 
        // transfer byte to inputfile to outputfile
        byte[] buffer = new byte[1024];
        int length;
        while ((length = myinput.read(buffer))>0) {
            myoutput.write(buffer,0,length);
        }
 
        //Close the streams
        myoutput.flush();
        myoutput.close();
        myinput.close();
    }
 
    public void opendatabase() throws SQLException {
        //Open the database
        String mypath = DB_PATH + DB_NAME;
        myDataBase = SQLiteDatabase.openDatabase(mypath, null, SQLiteDatabase.OPEN_READWRITE);
    }
 
    public synchronized void close() {
        if(myDataBase != null) {
            myDataBase.close();
        }
        super.close();
    }
 
}
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
17.12.2015, 18:17  [ТС]     Как работать с файлом .db? #4
но т.к. ты не создаешь БД, а используешь уже существующую, то в этом классе опиши метод который будет копировать БД из папки Assets твоего приложения в папку где приложение хранит бд
Ну так БД сохраняется в раздел data/data причем сдесь папка Assets?? А как тогда копировать БД из папки Assets??
Ssnake707
 Аватар для Ssnake707
8 / 8 / 6
Регистрация: 02.02.2015
Сообщений: 137
17.12.2015, 18:41     Как работать с файлом .db? #5
yura91, Я так понял у тебя есть файл .db откуда ты его взял я незнаю, и ты хочешь его открыть в своем приложение. Поэтому я говорю скопируй к себе в приложение

вот код который я использовал

Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
InputStream inputStream = null;
        OutputStream outputStream = null;
        try {
            //Путь к новой БД
            String outFileName = DB_PATH + DB_NAME;
            File file = new File(outFileName);
            if (!file.exists()) {
                this.getReadableDatabase();
                //получаем локальную бд как поток
                inputStream = context.getAssets().open(DB_NAME);
                //Открываем пустую БД
                outputStream = new FileOutputStream(outFileName);
                // по байтово копируем данные
                byte[] buffer = new byte[1024];
                int length;
                while ((length = inputStream.read(buffer)) > 0) {
                    outputStream.write(buffer, 0, length);
                }
                outputStream.flush();
                outputStream.close();
                inputStream.close();
            }
            return true;
        } catch (IOException e) {
            return false;
        }
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
17.12.2015, 18:54  [ТС]     Как работать с файлом .db? #6
В этом файле db хранится база данных другого приложения, например Skype. Путь к этому db - data/data и тд. Вы имеете ввиду скопировать этот файл db в папку assets, читать оттуда и записать в то место где у меня db хранится моего приложения(в data/data/mypackagename) и работать с ним через assets в своем приложении правильно я понял?? Но я же не обязательно в assets я могу его и на sd карту скопировать и работать с ним оттуда разве нет??
Ssnake707
 Аватар для Ssnake707
8 / 8 / 6
Регистрация: 02.02.2015
Сообщений: 137
19.12.2015, 13:00     Как работать с файлом .db? #7
yura91, да можете, но что бы работать с ним вы должны его скопировать в папку с БД своего приложения
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
23.12.2015, 15:24  [ТС]     Как работать с файлом .db? #8
Но папка db моего приложения находится в data/data.То есть я должен скопировать db файл, например скайпа в data/data где находится db моего приложения и потом только могу с ним работать верно?? Сделать это нужно программно как показано в примере выше так я понял правильно? И дальше можно программно подключится и открыть этот db файл стороннего приложения так?
Ssnake707
 Аватар для Ssnake707
8 / 8 / 6
Регистрация: 02.02.2015
Сообщений: 137
23.12.2015, 15:24     Как работать с файлом .db? #9
yura91, Верно
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
23.12.2015, 15:47  [ТС]     Как работать с файлом .db? #10
а дальше когда подключился к db как прочитать содержимое файла, например прочитать переписку из полей этого db, если это скайп ?? Обычно через Cursor или как то еще??
Ssnake707
 Аватар для Ssnake707
8 / 8 / 6
Регистрация: 02.02.2015
Сообщений: 137
23.12.2015, 15:48     Как работать с файлом .db? #11
yura91, Пишешь SQL запрос, он тебе возвращает cursor, а ты бегай по курсору.
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
23.12.2015, 16:46  [ТС]     Как работать с файлом .db? #12
Типа query() и тд стандартные функции да? А если структура db файла сложная, то бывает что через курсор его поля сложно получить??

Добавлено через 1 минуту
Как вообще рассмотреть структуру db файла как находятся поля и такого типа?? Там могут быть смещения в полях от начала еще что нибудь, что усложняет чтение да??
Ssnake707
 Аватар для Ssnake707
8 / 8 / 6
Регистрация: 02.02.2015
Сообщений: 137
23.12.2015, 18:34     Как работать с файлом .db? #13
yura91, Можно посмотреть скачав её на ПК и открыв через SqliteBrowser, где посмотришь что там лежит и как лежит. Да конечно, сложно достать то, что не знаешь как лежит.
yura91
28 / 26 / 2
Регистрация: 23.10.2013
Сообщений: 2,137
23.12.2015, 19:00  [ТС]     Как работать с файлом .db? #14
а можно как то задать при записи данных в базу данных расположение колонок относительно друг друга или смещение данных относительно начальной позиции в db файле?? Есть какие нибудь манипуляции со смещениями да?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
23.12.2015, 19:02     Как работать с файлом .db?
Еще ссылки по теме:

Android Как заставить работать BroadcastReceiver?
Android Как работать с google docs spreadsheets?
Как работать с API VK / Facebook? Android
Как заставить работать ViewPager + TabLayout в ScrollView? Android
Android Как работать с файловым менеджером

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Ssnake707
 Аватар для Ssnake707
8 / 8 / 6
Регистрация: 02.02.2015
Сообщений: 137
23.12.2015, 19:02     Как работать с файлом .db? #15
yura91, Это я не знаю, я слабо знаком с SQL, но возможно можно что то подобное сделать
Yandex
Объявления
23.12.2015, 19:02     Как работать с файлом .db?
Ответ Создать тему
Опции темы

Текущее время: 00:52. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru