Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLite. Метод rawQuery.

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

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение Foenix » 08 мар 2013, 15:44

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

То, тчо ты сделал - это вообще-то неправильно. Еще раз - попробуй просто держать столбик в базе лишний, где твои тексты будут в верхнем регистре и ищи по нему, а не по тому, что на экране.
R.id.team

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

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

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение Foenix » 08 мар 2013, 15:50

ой, мама, еще и два курсора!
надо делать, если уж так хочется - просто один запрос!!
SELECT title, proteins, fats, carbohydrates, water, energy FROM food WHERE title LIKE ? OR title LIKE ? .. тут еще можно записать 100500 всяких условий, вообще-то.

и зачем ты первую букву переводишь в вехрний регистр, если ищешь по ВХОЖДЕНИЮ подстроки, которая по сути в середине будет находиться..
R.id.team

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

beeline09
Сообщения: 33
Зарегистрирован: 23 сен 2012, 23:10

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение beeline09 » 08 мар 2013, 16:54

Olivka писал(а):Я ж тебе и по регистронезависимому подсказала - надо сравнивать с верхним регистром (для этого столбик должен быть в верхнем регистре, я ж писала) и строку тоже в верхний переводить.

То, тчо ты сделал - это вообще-то неправильно. Еще раз - попробуй просто держать столбик в базе лишний, где твои тексты будут в верхнем регистре и ищи по нему, а не по тому, что на экране.
В том-то и дело, что я не хочу лишний столбик создавать... Да и не умею. Я с SQL не дружу. Пока еще...
ой, мама, еще и два курсора!
надо делать, если уж так хочется - просто один запрос!!
SELECT title, proteins, fats, carbohydrates, water, energy FROM food WHERE title LIKE ? OR title LIKE ? .. тут еще можно записать 100500 всяких условий, вообще-то.

и зачем ты первую букву переводишь в вехрний регистр, если ищешь по ВХОЖДЕНИЮ подстроки, которая по сути в середине будет находиться..
На счет одного запроса - спасибо. Что-то сразу не догнал....
На счет первой буквы - когда я применяю toUpperCase для все строки, то все буквы в строке переводятся в верхний регистр, а мне нужно только первую переводить.

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

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение Foenix » 08 мар 2013, 19:55

да это понятно. Просто у тебя в базе данных например есть
Жареная колбаса.
А ты ищешь - %Колбаса% и %колбаса%. Зачем первое-то? А если там оса? то будешь искать %Оса%. Смысл?
R.id.team

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

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

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение Foenix » 08 мар 2013, 19:57

ой, у тебя и адаптер не курсор хавает, а структуру??
зачем же, столько ресурсов зря. Курсор быстрее
R.id.team

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

beeline09
Сообщения: 33
Зарегистрирован: 23 сен 2012, 23:10

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение beeline09 » 09 мар 2013, 00:03

Olivka писал(а):ой, у тебя и адаптер не курсор хавает, а структуру??
зачем же, столько ресурсов зря. Курсор быстрее
Ну на счет запросов - мне надо так как я написал - даже с малейшими совпадениями. Это работает круто.
а как сделать, чтоб сразу курсор он схавал?

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

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение Foenix » 09 мар 2013, 20:34

урок 52.
R.id.team

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

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение snowkam » 21 мар 2013, 11:30

Добрый день это мой дебют!!! Всем привет! (уфффф хорошо что "кошек" нет и надеюсь дальше не будет :-) )

Может я еще не дошел до изучения и дальше будет такой вопрос подниматься, но я так на всякий случай.

Как я понимаю что создается новая база при первом запуске приложения на андроиде. А если у меня много справочников и они внушительные скажем по 100 строк?! Как быть и вколачивать же их через массивы???
спасибо!

P/S В целом очень полезные уроки. Спасибо!

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение rezak90 » 21 мар 2013, 11:56

Вопрос аля-неочём =) 100 строк говорите?! вот если бы 100 000 строк тогда внушительно, а 100 это капля в море. На сколько я понял вопрос стоит в том как заполнять бд?
R.id.team
Политика на форуме запрещена

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение snowkam » 21 мар 2013, 12:04

Да какая разница сколько строк. Напишу много! Меня интересует вопрос как правильно устанавливать приложения которое использует базу данных.
Я могу все строки завести через SQL запрос. Все будет работать но както некрасиво слишком Громоздко!!!

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение rezak90 » 21 мар 2013, 12:15

создать бд на пк и закинуть в проект как файл, при запуске подключаться к ней
R.id.team
Политика на форуме запрещена

snowkam
Сообщения: 162
Зарегистрирован: 21 мар 2013, 11:22

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение snowkam » 21 мар 2013, 12:36

rezak90 писал(а):создать бд на пк и закинуть в проект как файл, при запуске подключаться к ней
Вопрос тогда как к сертифицированному специалисту. А не возникнут траблы с этой созданной локально базой данных? мало ли может версия базы не та или еще что нибудь? Для чего-то же google создал класс SQLiteOpenHelper с его методами onCreate() и onUpgrade() и именно в своем SDK android???!!!

Аватара пользователя
rezak90
Сообщения: 3422
Зарегистрирован: 26 июн 2012, 13:22
Откуда: UA
Контактная информация:

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение rezak90 » 21 мар 2013, 12:41

onCreate сработает и увидит что бд есть и не будет её создавать, onUpgrade срабоатет в том случае если вы укажите версию выше чем текущая у бд.
R.id.team
Политика на форуме запрещена

dimich
Сообщения: 14
Зарегистрирован: 17 июл 2013, 16:13

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение dimich » 17 июл 2013, 16:17

Доброго дня. Я, так называемый, зеленый новичек :)

подскажите по коду:

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

String selection = "salary < ?";
    String[] selectionArgs = {"12000"};
    
я правильно понимаю что selectionArgs - это массив? Т.е. допускается использование, например, в таком виде:

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

String[] selectionArgs = {"12000", "15000", "20000"};
?

П.С. Огромное спасибо за уроки.

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

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение Foenix » 17 июл 2013, 16:31

а че не попробовать?
R.id.team

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

dimich
Сообщения: 14
Зарегистрирован: 17 июл 2013, 16:13

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение dimich » 18 июл 2013, 09:25

Да в том-то и дело что попробавал - программа закрылась с ошибкой. Сейчас пока на отдыхе сижу со скромного нетбука - каждый запуск приложения - 5-10 минут жизни :(
Кстати, если мы не используем интерфейс, можно ли программу запускать в каком-то консольном режиме, что ли? Только чтобы логи, например, выдавала?

Такст лога первой ошибки:
07-18 06:20:32.694: E/AndroidRuntime(404): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.startandroid.develop.p0371sqliteinnerjoin/ru.startandroid.develop.p0371sqliteinnerjoin.MainActivity}: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x20d6e0

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

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение Foenix » 18 июл 2013, 12:10

dimich писал(а):Да в том-то и дело что попробавал - программа закрылась с ошибкой. Сейчас пока на отдыхе сижу со скромного нетбука - каждый запуск приложения - 5-10 минут жизни :(
Кстати, если мы не используем интерфейс, можно ли программу запускать в каком-то консольном режиме, что ли? Только чтобы логи, например, выдавала?

Такст лога первой ошибки:
07-18 06:20:32.694: E/AndroidRuntime(404): java.lang.RuntimeException: Unable to start activity ComponentInfo{ru.startandroid.develop.p0371sqliteinnerjoin/ru.startandroid.develop.p0371sqliteinnerjoin.MainActivity}: android.database.sqlite.SQLiteException: bind or column index out of range: handle 0x20d6e0
а у нас типа есть лишние полчаса жизни, так, получается?
Мой тебе совет, используй метод rawQuery, который тут в этом уроке разбирается, тогда ты сможешь вывести в лог запрос, который непосредственно идет к данным во время выполнения, скопировать его, скопировать куда-то базу данных, открыть ее каким-нибудь менеджером, вставить туда запрос и он тебе покажет где ошибка. Так ОЧЕНЬ удобно отлаживаться, чем вслепую делать запросы, по крайней мере, пока не придет опыт написания запросов.
R.id.team

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

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

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение KamiSempai » 18 июл 2013, 12:41

dimich писал(а):Да в том-то и дело что попробавал - программа закрылась с ошибкой.
selectionArgs - это список передаваемых параметров. Сколько знаков "?" в строке selection, столько и значений должно быть в массиве selectionArgs. Если количество разное будет ошибка.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

aleksbim
Сообщения: 81
Зарегистрирован: 02 фев 2013, 02:52

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение aleksbim » 31 июл 2013, 02:58

Подскажите пожалуйста:
- как правильно должны выглядеть данные строки без псевдонимов PL и PS?
- что значит on и о чем вообще говорит 4-я строка?

"select PL.name as Name, PS.name as Position, salary as Salary "
+ "from people as PL "
+ "inner join position as PS "
+ "on PL.posid = PS.id "
+ "where salary > ?";

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

Re: Урок 37. Запросы из связанных таблиц. INNER JOIN в SQLit

Сообщение Foenix » 31 июл 2013, 13:39

как я уже говорила as - это "как", как бы мы называем объект другим именем (иногда такая штука очень нужна), а потом в этом же запросе мы обращаемся к тому, что так назвали по этому имени через точку. Назвали что-то PL, и обратились к этому элементу как PL.имя поля (если мы так назвали таблицу).
Четвертая строка реализует правило, по которому соединяются две таблицы в одну. В одной таблице есть поле-ссылка на вторую, поэтому если их по этому полю соединить, то получится курсор с данными, которые нам требуются.

Например, есть люди, и у каждого есть один или несколько детей. В таком случае у нас будет две таблицы люди и их дети, у людей будут id, а в таблице с детьми будет сслыка на этот родительский id.
нам нужно объединять две таблицы в запросе, чтобы, например, ответить на вопрос - у скольких родителей дети достигли совершеннолетнего возраста.
Лучше разобраться с этой элементарщиной и хорошо понять, т.к. запросы могут быть просто в 100500 раз сложнее.
R.id.team

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

Ответить