Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Android > Доступ к базе данных с компа


Автор: Abbath1349 1.4.2013, 17:42
Подскажите можно ли написать программу для компа(на Qt, или NET),чтобы при подключении телефона получать доступ к базе данных приложения(своего) и редактировать его? и если да какие для этого есть библиотеки и нужно ли писать ContentProvider для базы данных в приложении?

Автор: Metalex 2.4.2013, 12:46
Я думаю, это возможно, но проще брать базу с тела, редактировать ее, потом снова загружать.

Вот скрипт, который должен работать (но у меня не завелся), который забирает базу приложения на комп.

Код

adb -d shell 'run-as com.example.package cat /data/data/com.example.package/databases/dbname.db > /sdcard/dbname.db'
adb pull /sdcard/dbname.db "D:\dbname.db"

Автор: Felan 17.4.2013, 16:26
Вменяемые приложения не хранят свою бд в открытом доступе. Так что так не получится получить базу с утройства. Только с эмулятора. Для того, что бы скопировать базу с телефона надо сначала ее скопировать в публичное место, а потом уже можно таким скриптом ее получить, ну или в ручную через DDMS.

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

Код

    public static void fileCopy(@NotNull File source, @NotNull File destination) throws IOException {
        FileChannel inChannel = new FileInputStream(source).getChannel();
        FileChannel outChannel = new FileOutputStream(destination).getChannel();

        try{
            inChannel.transferTo(0, inChannel.size(), outChannel);
        }
        finally {
            if (inChannel != null)
                inChannel.close();
            if(outChannel != null)
                outChannel.close();
        }
    }

    @SuppressWarnings("ResultOfMethodCallIgnored")
    public static void saveBackupDatabaseFile(@NotNull Context context, @NotNull String dataBaseName, @NotNull String backupName) {
        File dbFile = context.getDatabasePath(dataBaseName);
        File exportDir = new File(Environment.getExternalStorageDirectory(), dataBaseBackupFolder);
        if (!exportDir.exists()){
            exportDir.mkdirs();
        }

        File backup = new File(exportDir, backupName);

        try {
            backup.createNewFile();
            fileCopy(dbFile, backup);
        } catch (IOException e) {
            e.printStackTrace();
        }
    }


ЗЫЖ Если нужен постоянный активный доступ для того, что бы работать с этой базой, то придется делать не только провайдет, но и скорее всего собственный сервер.

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)