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

Обсуждение уроков
Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

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

Сообщение altwin » 06 авг 2014, 13:19

alexmx писал(а):Ну ты то можешь посчитать, а я то нет))) Единственное что я знаю это:
execSQL("ЗАПРОС КАКОЙ НИДЬ"). Ты мне лучше ссылку для вразумления кинь, по запросам sql)))
http://sql.learncodethehardway.org/book/
Изображение

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

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

Сообщение altwin » 06 авг 2014, 13:20

Дмитрий Х. писал(а):А как обстоят дела с Bind - переменными и индексами?
Предусмотрено ли их использование в SQLite?


http://developer.android.com/reference/ ... ement.html


[syntax=java5]
SQLiteDatabase db = dbHelper.getWritableDatabase();

public Cursor fetchByCountryCode(String strCountryCode)
{
/**
* SELECT * FROM Country
* WHERE code = US
*/
return cursor = db.query(true,
"Country", /**< Table name. */
null, /**< All the fields that you want the
cursor to contain; null means all.*/
"code=?", /**< WHERE statement without the WHERE clause. */
new String[] { strCountryCode }, /**< Selection arguments. */
null, null, null, null);
}

/** Fill a cursor with the results. */
Cursor c = fetchByCountryCode("US");

/** Retrieve data from the fields. */
String strCountryCode = c.getString(cursor.getColumnIndex("code"));

/** Assuming that you have a field/column with the name "country_name" */
String strCountryName = c.getString(cursor.getColumnIndex("country_name"));
[/syntax]
Изображение

WindStraider
Сообщения: 9
Зарегистрирован: 10 сен 2014, 15:28

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

Сообщение WindStraider » 12 сен 2014, 14:55

Здравствуйте. Подскажите пожалуйста , как именно формируется выражения WHERE в строке whereClause , при помощи класа SQLiteDatabase метода delete? Что оно должно содержать и чего нельзя туда добавлять? Что оно с себя представляет?

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

db.delete("mytable", "id = " + id, null);
Имя моей таблицы - "mytable"
Выражение WHERE - "id = " + id ( что она из себя представляет и почему именно так записывается , не ясно)
Раздел для замены строки - null

Аватара пользователя
KamiSempai
Сообщения: 1339
Зарегистрирован: 17 фев 2012, 21:23
Откуда: Мордор

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

Сообщение KamiSempai » 12 сен 2014, 15:28

Советую изучить SQL, тогда, на подобные вопросы, ответы будут находиться сразу.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
altwin
Сообщения: 1951
Зарегистрирован: 13 ноя 2013, 14:46

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

Сообщение altwin » 12 сен 2014, 15:32

WindStraider писал(а):Здравствуйте. Подскажите пожалуйста , как именно формируется выражения WHERE в строке whereClause , при помощи класа SQLiteDatabase метода delete? Что оно должно содержать и чего нельзя туда добавлять? Что оно с себя представляет?

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

db.delete("mytable", "id = " + id, null);
Имя моей таблицы - "mytable"
Выражение WHERE - "id = " + id ( что она из себя представляет и почему именно так записывается , не ясно)
Раздел для замены строки - null
ничего сложного тут нет, простой пример:
[syntax=java5]String selectQuery = "SELECT (*) FROM " + TABLE_TODO + " WHERE "
+ KEY_ID + " = " + todo_id;[/syntax]
где все, что в кавычках - строка, остальное строковые переменные.
Выражение WHERE - "id = " + id ( что она из себя представляет и почему именно так записывается , не ясно)
аналогично, строка в которую подставляется переменная. тут вы можете вместо переменной подставлять "?s", а вместо null в третьем аргументе передавать подставляемые значения.
Изображение

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 12 сен 2014, 19:49

не ?s, а просто ?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

WindStraider
Сообщения: 9
Зарегистрирован: 10 сен 2014, 15:28

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

Сообщение WindStraider » 13 сен 2014, 02:02

altwin писал(а):
WindStraider писал(а):Здравствуйте. Подскажите пожалуйста , как именно формируется выражения WHERE в строке whereClause , при помощи класа SQLiteDatabase метода delete? Что оно должно содержать и чего нельзя туда добавлять? Что оно с себя представляет?

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

db.delete("mytable", "id = " + id, null);
Имя моей таблицы - "mytable"
Выражение WHERE - "id = " + id ( что она из себя представляет и почему именно так записывается , не ясно)
Раздел для замены строки - null
ничего сложного тут нет, простой пример:
[syntax=java5]String selectQuery = "SELECT (*) FROM " + TABLE_TODO + " WHERE "
+ KEY_ID + " = " + todo_id;[/syntax]
где все, что в кавычках - строка, остальное строковые переменные.
Выражение WHERE - "id = " + id ( что она из себя представляет и почему именно так записывается , не ясно)
аналогично, строка в которую подставляется переменная. тут вы можете вместо переменной подставлять "?s", а вместо null в третьем аргументе передавать подставляемые значения.
То есть вместо строки "id = " можно написать что угодно? Или должны быть соблюдёны некие правила , формирования выражения?

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

db.delete("mytable", "id = " + id, null);
У меня проблема именно с этим кусочком кода , не могу правильно его составить , что бы удалялась одна строка . Вместо этого у меня удаляются все строки.

WindStraider
Сообщения: 9
Зарегистрирован: 10 сен 2014, 15:28

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

Сообщение WindStraider » 13 сен 2014, 20:01

Обнаружил что проблема в том что когда я удаляю все строки , а потом добавляю новые , то порядковый номер " ID" новых строк , добавляются по отнашению с удаленными строками. Например :
Шаг 1. мы создали 100 первых строк "hello"
Шаг 2. удалили 100 этих строк "hello"
Шаг 3.добавили новую строку "Thanks"
Но почему то порядковый номер (_ID) строки "Thanks" равен 101 , а не просто 1 .
Как можно сделать что бы порядковый номер , как то обнулялся , или какие могут быть тут варианты ?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 13 сен 2014, 20:32

можешь сам руководить и заполнять ID, но тогда сам и должен следить за уникальностью. В том, что он идет далее не с 1 нет никакой проблемы.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

WindStraider
Сообщения: 9
Зарегистрирован: 10 сен 2014, 15:28

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

Сообщение WindStraider » 14 сен 2014, 16:20

Та , всем спасибо кто искрене пытается помоч.

WindStraider
Сообщения: 9
Зарегистрирован: 10 сен 2014, 15:28

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

Сообщение WindStraider » 14 сен 2014, 16:22

Foenix писал(а):можешь сам руководить и заполнять ID, но тогда сам и должен следить за уникальностью. В том, что он идет далее не с 1 нет никакой проблемы.
Как так , нет никакой проблемы. А если я исчерпаю 8-байтный счетчик?То есть число идентификаторов его исчерпает? Будет ошибка. Или Вы хотите сказать что я не прав?

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 14 сен 2014, 21:37

это тип long, он идет до 2 в 63й степени. Исчерпаешь?
для тех кому мало, для уникального id есть другие штуки. Но я думаю - что андроид не та вещь, куда стоит записывать-стирать-записывать СТОЛЬКО данных.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mini
Сообщения: 8
Зарегистрирован: 03 сен 2014, 16:23

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

Сообщение Mini » 14 сен 2014, 21:59

Foenix писал(а):это тип long, он идет до 2 в 63й степени. Исчерпаешь?
для тех кому мало, для уникального id есть другие штуки. Но я думаю - что андроид не та вещь, куда стоит записывать-стирать-записывать СТОЛЬКО данных.
Верно. Вообще то при переполнении, начинают заполняться удаленные строки. Так что место всегда будет.

Mini
Сообщения: 8
Зарегистрирован: 03 сен 2014, 16:23

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

Сообщение Mini » 14 сен 2014, 22:06

А как можно идентифицирывать "уникальный идентификатор" по данным которые находятся в колонках?

Ну или как то сделать по этому типу , который удаляет строку , ссылаясь на строковые данные а не "идентификатор"
delete from table where field = 'Loko@mail.ru'
Мне нужно удалить строку , по нажатию кнопки , но при этом не вводить "ID" строки , как указанно у вас в примере

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 15 сен 2014, 00:00

ну а что? так и удаляйте
правда, обычно строки не удаляются по такому условию. Условия сравнения строк чаще используются при поиске, там есть предложение "like", а так же символы % и ? заменяющие несколько или 1 любой символ.
Обязательно так же учитыватЬ, что строки могут быть в разных регистрах, поэтому обычно сравнивают их, переводя в UPPPER CASE. Но с русскими буквами в этом случае проблемы.
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mini
Сообщения: 8
Зарегистрирован: 03 сен 2014, 16:23

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

Сообщение Mini » 15 сен 2014, 01:27

Foenix писал(а):ну а что? так и удаляйте
правда, обычно строки не удаляются по такому условию. Условия сравнения строк чаще используются при поиске, там есть предложение "like", а так же символы % и ? заменяющие несколько или 1 любой символ.
Обязательно так же учитыватЬ, что строки могут быть в разных регистрах, поэтому обычно сравнивают их, переводя в UPPPER CASE. Но с русскими буквами в этом случае проблемы.
Ой спасибо. Но так не удаляется , выскакивают ошибки.
Может приведете пример ?
А как можно идентифицирывать "уникальный идентификатор" по данным которые находятся в колонках (строки)?
Ответьте на 2 вопроса пожалуйста.

Аватара пользователя
Foenix
Сообщения: 4201
Зарегистрирован: 20 окт 2012, 12:01

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

Сообщение Foenix » 15 сен 2014, 16:01

Mini писал(а): Ой спасибо. Но так не удаляется , выскакивают ошибки.
Может приведете пример ?
А как можно идентифицирывать "уникальный идентификатор" по данным которые находятся в колонках (строки)?
Ответьте на 2 вопроса пожалуйста.
пример привести не могу, т.к. не знаю что вы там задумали.
Чтобы понять "выскакивают ошибки" - нужно привести код а так же лог - какие именно ошибки выскакивают, иначе это все будет гадание на кофейной гуще.

Вторую фразу я вообще не поняла - что значит "идентифицировать уникальный идентификатор"? И главное, зачем?
R.id.team

NullPointerException - что делать???
viewtopic.php?f=33&t=3899&p=28952#p28952
Где моя ошибка?
viewtopic.php?f=60&t=3198

Mini
Сообщения: 8
Зарегистрирован: 03 сен 2014, 16:23

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

Сообщение Mini » 15 сен 2014, 19:36

Foenix писал(а):
Mini писал(а): Ой спасибо. Но так не удаляется , выскакивают ошибки.
Может приведете пример ?
А как можно идентифицирывать "уникальный идентификатор" по данным которые находятся в колонках (строки)?
Ответьте на 2 вопроса пожалуйста.
пример привести не могу, т.к. не знаю что вы там задумали.
Чтобы понять "выскакивают ошибки" - нужно привести код а так же лог - какие именно ошибки выскакивают, иначе это все будет гадание на кофейной гуще.

Вторую фразу я вообще не поняла - что значит "идентифицировать уникальный идентификатор"? И главное, зачем?
delete from table where field = 'Loko@mail.ru'
Удаляет строку Loko@mail.ru

Вы написали что можно использывать команды SQL в андройде. Но что бы их использывать , недостаточно просто написать эту (delete from table where field = 'Loko@mail.ru' ) строку в компиляторе , что бы её удалить . Необходима обертка , которая даёт доступ к базе.
Так через какой то метод нужно отправлять SQL команды , или как то еще ?
Можите привести пример, удаляния 1 cтроки из You@mail.ru колонки
1 | Son@mail.ru
2 | You@mail.ru
5 | We@@mail.ru
10| our@@mail.ru
Foenix писал(а):
Mini писал(а): Вторую фразу я вообще не поняла - что значит "идентифицировать уникальный идентификатор"? И главное, зачем?
Вы же этому учили на 35 уроке .Смотите. Что бы удалить строку , нужно найти ее уникальный идентификатор :
String id="111";
Mydb.delete(colBase.TABLE_NAME, "_id="+id ,null); удаляем 111 строку

Пример удаления : известно строковое значение строки "Hello", но неизвестно какой у неё "уникальный идентификатор" . Значит нужно тайти по значению строку её "уникальный идентификатор" . Найдя его , строку можно будет удалить используя метод метода delete ,класса SQLiteDatabase.



.

semiromid
Сообщения: 9
Зарегистрирован: 26 авг 2014, 11:54

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

Сообщение semiromid » 16 сен 2014, 04:56

Я буду удалять строку не по "уникальному идентификатору" а по названию колонки , в которой записаны адреса. Допустим она называется "FIELD_NAME"
public static final String FIELD_NAME = "contact_table";
String email="You@mail.ru";
Mydb.delete(colBase.TABLE_NAME, "contact_table = " + "'" + email + "'" ,null);
удаляем "You@mail.ru"

Товарищ, дорогой. Может хватит уже всех хаять при каждом ответе?

rustech
Сообщения: 9
Зарегистрирован: 20 янв 2015, 12:27
Откуда: Москва

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

Сообщение rustech » 27 янв 2015, 01:30

Правильно понимаю, что строки кода

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

if (id.equalsIgnoreCase("")) {
break;
}
в case R.id.btnUpd: и case R.id.btnDel влияют только на то, что в логах не выводится запись об обновлении или удалении записи? Или там какой-то более глубокий смысл?

Ответить