Страница 8 из 9

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 27 янв 2015, 03:19
doter.ua
rustech писал(а):Правильно понимаю, что строки кода

Код: Выделить всё

if (id.equalsIgnoreCase("")) {
break;
}
в case R.id.btnUpd: и case R.id.btnDel влияют только на то, что в логах не выводится запись об обновлении или удалении записи? Или там какой-то более глубокий смысл?
Они обновляют\удаляют записи. Что же касается кода, который вы скинули: если вы внимательно изучали урок, то должны были заметить, что id - это значение из ЕдитТекста, который заполняет юзер, то есть - вы. String id = etID.getText().toString(); Следовательно если вы ничего не заполните, то и данных не будет. Собсна это и проверяется: if (ид.равен пустой строке ).

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 27 янв 2015, 11:35
rustech
doter.ua писал(а): Что же касается кода, который вы скинули: если вы внимательно изучали урок, то должны были заметить, что id - это значение из ЕдитТекста, который заполняет юзер, то есть - вы. String id = etID.getText().toString(); Следовательно если вы ничего не заполните, то и данных не будет. Собсна это и проверяется: if (ид.равен пустой строке ).
Да, но зачем проверяется то, что ничего не заполнено? Чтобы не выводить запись в лог и не выполнять обработчик, если поле пустое?

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 27 янв 2015, 11:48
doter.ua
rustech писал(а):
doter.ua писал(а): Что же касается кода, который вы скинули: если вы внимательно изучали урок, то должны были заметить, что id - это значение из ЕдитТекста, который заполняет юзер, то есть - вы. String id = etID.getText().toString(); Следовательно если вы ничего не заполните, то и данных не будет. Собсна это и проверяется: if (ид.равен пустой строке ).
Да, но зачем проверяется то, что ничего не заполнено? Чтобы не выводить запись в лог и не выполнять обработчик, если поле пустое?

Код: Выделить всё

case R.id.btnUpd:
      if (id.equalsIgnoreCase("")) {
        break;
      }
      Log.d(LOG_TAG, "--- Update mytabe: ---");
      // подготовим значения для обновления
      cv.put("name", name);
      cv.put("email", email);
      // обновляем по id
      int updCount = db.update("mytable", cv, "id = ?",
          new String[] { id });
      Log.d(LOG_TAG, "updated rows count = " + updCount);
      break;
Вот обновление: int updCount = db.update("mytable", cv, "id = ?",
new String[] { id });
Не знаете что такое break ? - гугл.

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 29 янв 2015, 02:25
rustech
doter.ua писал(а): Вот обновление: int updCount = db.update("mytable", cv, "id = ?",
new String[] { id });
Не знаете что такое break ? - гугл.
Да я не об этом :)
Разобрался. Еще удалить этот код (проверку на пустое значение id)

Код: Выделить всё

if (id.equalsIgnoreCase("")) {
                    break;
                }
то при нажатии на кнопку update и при пустом поле id программа выполнит действия с таблицей базы данных, но ничего в ней не изменит и в логи выведет сообщение

Код: Выделить всё

--- Update mytabe: ---
updated rows count = 0
Т.е., сделал я для себя вывод, проверка на пустое значение id нужна для того, чтобы не лишний раз запускать процесс работы с таблицей базы данных, оптимизировав тем самым работу приложения.

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 29 янв 2015, 02:58
rustech
lstaticl писал(а):Если указать в поле id не цифры, а буквы, или float число - приложение упадет.
Проверял, действительно так.
lstaticl писал(а):А в целом по теории работы с БД, осуществляя выборку по ID или иные действия по ID - нужно приводить переменную к INT и после проверять на 0. Тогда не надо проверять на пустоту, и нет возможности для Injection. :)
Если вышесказанное корректно, буду признателен, если чуть подробнее объясните, как реализовывается проверка на ноль. Приведение переменной к int, насколько понял, так:

Код: Выделить всё

        String id = etID.getText().toString();
        int idInt = Integer.parseInt(id);

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 29 янв 2015, 11:51
doter.ua
rustech писал(а):
doter.ua писал(а): Вот обновление: int updCount = db.update("mytable", cv, "id = ?",
new String[] { id });
Не знаете что такое break ? - гугл.
Да я не об этом :)
Разобрался. Еще удалить этот код (проверку на пустое значение id)

Код: Выделить всё

if (id.equalsIgnoreCase("")) {
                    break;
                }
то при нажатии на кнопку update и при пустом поле id программа выполнит действия с таблицей базы данных, но ничего в ней не изменит и в логи выведет сообщение

Код: Выделить всё

--- Update mytabe: ---
updated rows count = 0
Т.е., сделал я для себя вывод, проверка на пустое значение id нужна для того, чтобы не лишний раз запускать процесс работы с таблицей базы данных, оптимизировав тем самым работу приложения.
Ничего ты не понял. перечитай код еще раз.

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 30 янв 2015, 08:22
rustech
doter.ua писал(а): Ничего ты не понял. перечитай код еще раз.
Спасибо :D

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 09 фев 2015, 17:34
vladsalat93
can't resolve symbol id, почему?

Код: Выделить всё


        case R.id.btnUpdate:
                if (id.equalsIgnoreCase("")){
                    break;
                }
                Log.d(LOG_TAG, "---Update mytable---");
 
                cv.put("name", name);
                cv.put("email", email);
 
                int updCount = db.update("mytable", cv, "id = ?",
                        new String[] { id });
                Log.d(LOG_TAG, "upatet rows count = " +updCount);
                break;
            case R.id.btnDel:
                if (id.equalsIgnoreCase("")){
                    break;
                }
                Log.d(LOG_TAG, "---Deleted from mytable---");
 
                int delCount = db.delete("mytable", "id = " + id, null);
                Log.d(LOG_TAG, "deleted rows count =" + delCount);
                break;


Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 27 фев 2015, 16:43
AlexeyFedor
Чисто просто из интереса. Можно или нет редактировать, удалять строку напрямую по позиции курсора.
Или только стандартный подход. Зная позицию курсора, надо вытащить ID строки, и уже по ID совершать действия.

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 27 фев 2015, 17:53
AlexeyFedor
Блин ПОМОЖИТЕ. Тормозю интенсивно. Все есть осталось правильно написать запрос на обновление, не доходит до мну никак. :evil:

Код: Выделить всё

                       int idRecordColIndex=cur.getColumnIndex("_id");
			int idRecord=cur.getInt(idRecordColIndex);//вытаскиваем ID записи
			//заполняем контейнер записями которые нужно изменить
			cv.put("engWord", etEngWord.getText().toString());//
			cv.put("rusWord", etRusWord.getText().toString());//
			cv.put("association", etAssociation.getText().toString());//
			if(cbVisible.isChecked()){
				cv.put("visible", "yes");
			}
			else {
				cv.put("visible", "no");
			}
			//как правильно выполнить запрос на обновление
			db.update("dictonary", cv, null,  null);

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 28 фев 2015, 12:36
AlexeyFedor
Отвечаю сам себе. Может кому пригодится.

Код: Выделить всё

int idRecordColIndex=cur.getColumnIndex("_id");
			int idRecord=cur.getInt(idRecordColIndex);//вытаскиваем ID записи
			//заполняем контейнер записями которые нужно изменить
			cv.put("engWord", etEngWord.getText().toString());//
			cv.put("rusWord", etRusWord.getText().toString());//
			cv.put("association", etAssociation.getText().toString());//
			if(cbVisible.isChecked()){
				cv.put("visible", "yes");
			}
			else {
				cv.put("visible", "no");
			}
			//как правильно выполнить запрос на обновление
			Log.d(MY_LOG, " ID строки которорую нужно изменить  = "+ idRecord);
			db.update("dictonary", cv, "_id=?",  new String[] { String.valueOf(idRecord)});
В моей голове никак не укладывалось, что значение _id в таблице имеет тип int, а запросе надо передавать строковое значение. Определенно надо почитать что то по SQL для чайников.

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 28 фев 2015, 17:20
Foenix
Чуть чуть не в тему, но хочу отметить, что это такая субд, в которой что int, что String - ты в столбец таблицы можешь что угодно записать - она не заругается. И второе - типы данных sqlite сильно ограничены в разнообразии. Есть только integer, real,text и blob

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 01 мар 2015, 06:25
AlexeyFedor
Foenix писал(а):Чуть чуть не в тему, но хочу отметить, что это такая субд, в которой что int, что String - ты в столбец таблицы можешь что угодно записать - она не заругается. И второе - типы данных sqlite сильно ограничены в разнообразии. Есть только integer, real,text и blob
Посоветуйте плз. Что можно почитать по SQL ну совсем для чайничков, не одаренных интелектом. Желательно чтобы картинок было побольше. :idea:

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 22 май 2015, 13:06
Foenix
1 не сохранился. Это всего лишь число. На память не влияет. Не гарантировано что не будет вставлено ещё раз 1
2 БД сама по себе. Активити сами по себе.БД хэлпер отдельный класс сам по себе. Он создаёт базу. Для доступа используйте контент провайдер

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 22 май 2015, 14:54
Радислав Гандопас
Вот такие вот 2 вопроса:
1) Представим что я добавил запись в таблицу, она получила id=1. После удаления этой записи из таблицы (то есть после нажатия кнопки Delete),первая запись удалилась, добавляю другую запись. После считываю то что есть в таблице, а есть там только вторая запись под id =2. Вопрос в том почему первой записи больше не существует, а ее id сохранился где-то в памяти и последующие записи уже никогда не получат id=1 даже если все предыдущие записи будут удалены. Это ведь повлияет на то как постепенно приложение будет откусывать все больше памяти системы себе?

2) Можно каким-нибудь образом создать базу данных в одном активити, а содержимое читать в другом?

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 22 май 2015, 15:43
Foenix
ответила же. Что не ясно?

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 10 июл 2015, 22:24
dmitry_n
Кто-нибудь знает, куда сохраняются файлы с записями БД или Shared Preferences при работе с эмулятором Genymotion? Я нашел только общий файл с логами.

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 11 июл 2015, 02:12
Foenix
знаем ;)

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 11 июл 2015, 08:30
doter.ua
dmitry_n писал(а):Кто-нибудь знает, куда сохраняются файлы с записями БД или Shared Preferences при работе с эмулятором Genymotion? Я нашел только общий файл с логами.
http://stackoverflow.com/a/20336819

Re: Урок 35. SQLite. Методы update и delete с указанием усло

Добавлено: 16 июл 2015, 23:05
Bofyr
"Обратите внимание, что условия и для update и для delete у меня одинаковые, а именно id = значение из поля etID. Но реализовал я их немного по-разному. Для update использовал символ ? в строке условия и массив аргументов. А для delete вставил значение сразу в строку условия. Таким образом, я просто показал способы формирования условия. А вы уже используйте тот, что больше нравится или лучше в конкретной ситуации."
Первый способ ( id = значение из поля etID) подходит только для Integer значений. Если таким способом передать String то будет ошибка NoSuchColumnExcaption :
http://stackoverflow.com/questions/1682 ... uch-column