Форум программистов, компьютерный форум, киберфорум
Наши страницы
Программирование Android
Войти
Регистрация
Восстановить пароль
 
TanaTiX
Модератор
2793 / 1647 / 168
Регистрация: 19.02.2011
Сообщений: 5,972
Завершенные тесты: 1
#1

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

18.09.2016, 18:09. Просмотров 317. Ответов 6
Метки нет (Все метки)

Бьюсь я над проблемой изменения значений в БД ( http://www.cyberforum.ru/android-dev/thread1805861.html ). Решил посмотреть что именно происходит, так сказать "изнутри". Поставил программу 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".

С чем это может быть связно, почему значение меняется самостоятельно на предыдущее? Как это исправить? Может ли быть, что изменение в БД, описанное в теме по ссылке выше не работает по той же причине, что и описано тут? Заранее спасибо.
0
Лучшие ответы (1)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.09.2016, 18:09
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Обновление базы данных вручную (Программирование Android):

Обновление Базы данных
Есть база данных которую просматриваю в Активити1, сделал все работает. При...

Обновление базы данных SQLite
В приложении имеется база данных с таблицей, заранее заполненной информацией....

Обновление базы данных sqlite
Уже который день бьюсь никак не выходит Подскажите, что я делаю неверно у...

SQLite обновление базы данных
Всем привет. Использую базу данных в приложении. При обновлении программы...

Постолбцовое отображение данных из базы данных SQLite
Уважаемые форумчане, помогите пожалуйста. Необходимо вывести данные из таблицы...

Android - Вывод данных из базы данных
Всем здравствуйте! Задача не сложная, надо просто знать:-[ Нужно вывести данные...

6
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
18.09.2016, 18:34 #2
Цитата Сообщение от TanaTiX Посмотреть сообщение
в результате чего изменения не вносятся
чой-то вы намудрили! было бы проще на кусочек кода посмотреть...
ошибки в лог выводит? Как выглядит SQL строка перед выполнением - выведи в Log.g
Успешно менял базу и в ручную в DB Browser for SQLite и программно...
1
TanaTiX
Модератор
2793 / 1647 / 168
Регистрация: 19.02.2011
Сообщений: 5,972
Завершенные тесты: 1
18.09.2016, 19:10  [ТС] #3
Tester64, код есть в этой теме http://www.cyberforum.ru/android-dev/thread1805861.html Не уверен, что темы между собой связаны, поэтому создал отдельную. На всякий случай продублирую код.
Инициализация изменения БД в обработчике
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 Посмотреть сообщение
ошибки в лог выводит?
Забыл сказать, ошибок нет.
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
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);
Попробуй подобное (писал сразу в форум - могут быть "очепятки")
1
TanaTiX
Модератор
2793 / 1647 / 168
Регистрация: 19.02.2011
Сообщений: 5,972
Завершенные тесты: 1
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);
Проблема не решена.
0
Tester64
396 / 357 / 46
Регистрация: 22.05.2013
Сообщений: 2,518
19.09.2016, 00:23 #6
Лучший ответ Сообщение было отмечено TanaTiX как решение

Решение

Цитата Сообщение от TanaTiX Посмотреть сообщение
UPDATE OR IGNORE resources SET up = 2 WHERE _id = 2
попробуй упростить запрос...
SQL
1
UPDATE resources SET up = 2
(должно заменить у всех записей - вдруг не правильно условие понимает)
можешь попробовать запрос по записям устроить вида "SELECT * FROM resources" и выведи результаты курсора в лог. Или хотя-бы количество записей/полей в курсоре...
может база у тебя в другом месте лежит, а не там где ты ее "проверяешь"? внешне все правильно...
1
TanaTiX
Модератор
2793 / 1647 / 168
Регистрация: 19.02.2011
Сообщений: 5,972
Завершенные тесты: 1
19.09.2016, 18:10  [ТС] #7
Tester64, действительно намудрил, запутался в переменных, в результате вывод значений был не правильным.

Не по теме:

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

0
19.09.2016, 18:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
19.09.2016, 18:10
Привет! Вот еще темы с решениями:

Вывод данных из базы данных SQLite
Здравствуйте уважаемые форумчане! Делаю программу для работы с базой данных...

Обновление данных
Добрый день. Еще такая проблема возникла. Есть форма где нужно...

Обновление данных приложения
Здравствуйте, есть простенькое приложение, которое показывает количество дней...

Обновление данных адаптера
Здравствуйте. Помогите, кто сталкивался. Есть список, где в зависимости от...


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2018, vBulletin Solutions, Inc.
Рейтинг@Mail.ru