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

Обновление базы данных вручную - Android

Восстановить пароль Регистрация
 
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,658
18.09.2016, 18:09     Обновление базы данных вручную #1
Бьюсь я над проблемой изменения значений в БД ( Значение в БД не изменяется ). Решил посмотреть что именно происходит, так сказать "изнутри". Поставил программу DB Browser for SQLite, запустил с помощью Android Studio утилиту Android Device Monitor. Там нашел свое устройство, создаваемую БД, скопировал ее на жесткий диск, внес изменения с помощью DB Browser for SQLite и вернул обратно на тоже место.
Далее наблюдаю интересное поведение. Запускаю с эмулятора свою программу, вижу измененную БД (она на данный момент небольшая, вся выводится списком). Далее кликаю по кнопке, которая предполагает внесение изменений в БД, в результате чего изменения не вносятся, а ранее измененное значение возвращается к исходному состоянию.

Что бы было более понятно.
Есть числовое и текстовое поле, 2 текстовых. В числовых везде стоит 0. В текстовых в одном случае "root", в другом "mail". Вручную меняю "root" на "new root", пересохраняю, запускаю приложение. Вижу текст с "mail" и "new root". Далее жму на кнопку, меняющую значение 0 на 2 в записи, где стоит "mail", в результате значение с 0 на 2 не меняется, а значение с "new root" меняется на "root".

С чем это может быть связно, почему значение меняется самостоятельно на предыдущее? Как это исправить? Может ли быть, что изменение в БД, описанное в теме по ссылке выше не работает по той же причине, что и описано тут? Заранее спасибо.
Лучшие ответы (1)
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
18.09.2016, 18:34     Обновление базы данных вручную #2
Цитата Сообщение от TanaTiX Посмотреть сообщение
в результате чего изменения не вносятся
чой-то вы намудрили! было бы проще на кусочек кода посмотреть...
ошибки в лог выводит? Как выглядит SQL строка перед выполнением - выведи в Log.g
Успешно менял базу и в ручную в DB Browser for SQLite и программно...
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,658
18.09.2016, 19:10  [ТС]     Обновление базы данных вручную #3
Tester64, код есть в этой теме Значение в БД не изменяется Не уверен, что темы между собой связаны, поэтому создал отдельную. На всякий случай продублирую код.
Инициализация изменения БД в обработчике
Java
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
viewHolder.button.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                //Log.w("click", "test button click " + position + " " + resource);
                ContentValues data = new ContentValues();
                data.put(DatabaseHelper.UP, DatabaseHelper.UP_PROGRESS);
                DatabaseHelper db = DatabaseSingleton.getInstance().getDataBase();
                Log.w(">>>adapter", ""+list);
                db.updateData(resource, data);
                Log.w(">>>adapter", ""+list);
                clear();
                list = DatabaseSingleton.getInstance().getDataBase().getAllResources();
                addAll(list);
                notifyDataSetChanged();
                //Log.w(">>>adapter", ""+list);
            }
        });
Собственно изменение значения
Java
1
2
3
4
5
6
7
8
public void updateData(Resource resource, ContentValues values){
        Log.w("update item", "id: "+BaseColumns._ID + " old value ");
        db = this.getWritableDatabase();
        int countChanges = db.update(DATABASE_TABLE, values, BaseColumns._ID + "= ?", new String[]{Integer.toString(resource.get_id())});
        //int countChanges = db.update(DATABASE_TABLE, values, BaseColumns._ID + "= " + resource.get_id() , null);
        Log.w("update item", "id: "+BaseColumns._ID + " new value " + countChanges);
 
    }
Используемые константы
Java
1
2
3
public static final String DATABASE_TABLE = "resources";
public static final int UP_PROGRESS = 2;
public static final String UP = "up";
Добавлено через 13 минут
Цитата Сообщение от Tester64 Посмотреть сообщение
ошибки в лог выводит?
Забыл сказать, ошибок нет.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
18.09.2016, 19:40     Обновление базы данных вручную #4
Цитата Сообщение от TanaTiX Посмотреть сообщение
db.update(
никогда не пользовался этой конструкцией... привык сам строки запроса составлять...
ИМХО строкой манипулировать проще...
Java
1
2
3
4
5
db = this.getWritableDatabase();
String sqlstr;
sqlstr = "UPDATE OR IGNORE "+DATABASE_TABLE+" SET val="+DatabaseHelper.UP+"="+DatabaseHelper.UP_PROGRESS+" WHERE "+BaseColumns._ID + "= " + resource.get_id();
Log.g("my", sqlstr);
db.execSQL(sqlstr);
Попробуй подобное (писал сразу в форум - могут быть "очепятки")
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,658
18.09.2016, 22:41  [ТС]     Обновление базы данных вручную #5
Tester64, отправляю такой запрос, ошибок нет, изменений в БД нет.
SQL
1
UPDATE OR IGNORE resources SET up = 2 WHERE _id = 2
Java
1
2
3
String strSQL = "UPDATE OR IGNORE " + DATABASE_TABLE + " SET "+ DatabaseHelper.UP + " = " + DatabaseHelper.UP_PROGRESS + " WHERE "+ BaseColumns._ID +" = "+ resource.get_id();
        Log.w("my", strSQL);
        db.execSQL(strSQL);
Проблема не решена.
Tester64
395 / 356 / 43
Регистрация: 22.05.2013
Сообщений: 2,488
19.09.2016, 00:23     Обновление базы данных вручную #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
Цитата Сообщение от TanaTiX Посмотреть сообщение
UPDATE OR IGNORE resources SET up = 2 WHERE _id = 2
попробуй упростить запрос...
SQL
1
UPDATE resources SET up = 2
(должно заменить у всех записей - вдруг не правильно условие понимает)
можешь попробовать запрос по записям устроить вида "SELECT * FROM resources" и выведи результаты курсора в лог. Или хотя-бы количество записей/полей в курсоре...
может база у тебя в другом месте лежит, а не там где ты ее "проверяешь"? внешне все правильно...
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2016, 18:10     Обновление базы данных вручную
Еще ссылки по теме:

Android Обновление Базы данных
Обновление данных адаптера Android
Android Обновление данных один раз в сутки
Android ExpandableListView обновление данных
Обновление данных Android

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

Или воспользуйтесь поиском по форуму:
TanaTiX
Модератор
 Аватар для TanaTiX
2731 / 1576 / 144
Регистрация: 19.02.2011
Сообщений: 5,658
19.09.2016, 18:10  [ТС]     Обновление базы данных вручную #7
Tester64, действительно намудрил, запутался в переменных, в результате вывод значений был не правильным.

Не по теме:

З.Ы. По хорошему бы 2 темы объединить, т.к. суть проблемы и ее решение оказались в одном.

Yandex
Объявления
19.09.2016, 18:10     Обновление базы данных вручную
Ответ Создать тему
Опции темы

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