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

Обсуждение уроков
TAMEPJlAH
Сообщения: 4
Зарегистрирован: 28 окт 2013, 11:39

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

Сообщение TAMEPJlAH » 07 апр 2014, 11:33

Foenix писал(а):Данный урок не относится к теме
я это понимаю, но изучая Android столкнулся с такой проблемой, что не получается считать данные из БД, созданной в другой активити... Из урока 29 помню что можно вызвать активити через startActivityForResult. И, используя метод putExtra, передать данные в мою активити. Но нужно как-то различать какая кнопка нажата, чтобы не передавать все таблицы разом

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

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

Сообщение Foenix » 07 апр 2014, 12:49

осмотритесь на форуме - постоянно задается этот вопрос. Вот буквально недавно был. Вчера такой.
viewtopic.php?f=34&t=3822
R.id.team

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

Аватара пользователя
zapekankaaa
Сообщения: 2
Зарегистрирован: 21 апр 2014, 02:25

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

Сообщение zapekankaaa » 21 апр 2014, 02:34

Здравствуйте!

у меня возникла проблема с запросом rawQuery - не получается написать запрос без псевдонимов.
Вот как описывается запрос в уроке:

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

  String sqlQuery = "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
Моя задача была написать то же самое, но без псевдонимов, сначала я попробовала это сделать так:

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

String sqlQuery = "select people.name, position.name, position.salary"
                + "from people "
                + "inner join position"
                + "on people.posid = position.id "
                + "where salary > ?";
Результат: ошибка в логе. Я решила, что всему виной одноимённые поля в таблицах добавила 2 псевдонима для полей:

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

String sqlQuery = "select people.name as param1, position.name as param2, position.salary as Salary "
                + "from people "
                + "inner join position"
                + "on people.posid = position.id "
                + "where salary > ?";
Результат: опять ошибка в логе:
Caused by: android.database.sqlite.SQLiteException: near ".": syntax error (code 1): , while compiling: select people.name as param_1, position.name as param_2, position.salary as Salary from people inner join positionon people.posid = position.id where salary > ?

Причем когда я писала запрос совсем без псевдонимов, ошибка была такой же (имею в виду вот это: near ".": syntax error), так что я уже не вполне уверена, что дело было в одноимённых полях.
Подскажите, пожалуйста, что не так с запросом?

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

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

Сообщение Foenix » 21 апр 2014, 11:27

positionon
тут пробел поставь.
R.id.team

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

Аватара пользователя
zapekankaaa
Сообщения: 2
Зарегистрирован: 21 апр 2014, 02:25

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

Сообщение zapekankaaa » 21 апр 2014, 16:18

positionon
тут пробел поставь.
спасибо!
после этого исправления вариант с двумя псевдонимами заработал верно.

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

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

Сообщение Foenix » 21 апр 2014, 16:37

пожалуйста. Далеко не уходи, у нас тут женщин не хватает :)
R.id.team

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

Tom Vonzet
Сообщения: 1
Зарегистрирован: 01 окт 2014, 18:03

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

Сообщение Tom Vonzet » 03 янв 2015, 10:44

Прошу прощения, понимаю, что вопрос скорее по SQL, чем по Android, но всё же

Почему был использован inner join ? Нельзя реализовать с помощью where?
что-то типа

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

SELECT people.name, position.name, salary FROM people, position WHERE people.posid=position.id AND salary<12000;

shaldem
Сообщения: 1
Зарегистрирован: 04 фев 2015, 20:50

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

Сообщение shaldem » 04 фев 2015, 20:52

Tom Vonzet писал(а):Прошу прощения, понимаю, что вопрос скорее по SQL, чем по Android, но всё же

Почему был использован inner join ? Нельзя реализовать с помощью where?
что-то типа

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

SELECT people.name, position.name, salary FROM people, position WHERE people.posid=position.id AND salary<12000;

В SQLLite не знаю, нужно посто попробовать, а вообще вопрос вкуса

Sanya2580
Сообщения: 1
Зарегистрирован: 18 авг 2015, 22:07

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

Сообщение Sanya2580 » 18 авг 2015, 22:12

Подскажите пожалуйста, хочу в этом примере добавить кнопку для полной очистки бд,не могу понять какой код нужно прописать для нее(, и еще вопрос как сделать переменные из MainActivity видными в классе DBHelper, не применяя при этом геттеры и сеттеры.

Батька Андройд
Сообщения: 8
Зарегистрирован: 20 авг 2015, 10:17

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

Сообщение Батька Андройд » 20 авг 2015, 10:29

Здравствуйте. Уже долго не могу сделать так что бы база данных создавалась и заполнялась в одном классе, а все остальные операции с данными из базы производились в других классах. Код написал, среда разработки ошибок никаких не выдает, но БД вообще не создается видимо потому что класс в котором она она находится не выполнился. Скажите делал кто-нибудь такую задачу?

Аватара пользователя
doter.ua
Сообщения: 1106
Зарегистрирован: 23 ноя 2013, 16:08
Откуда: Ukraine

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

Сообщение doter.ua » 20 авг 2015, 13:30

Батька Андройд
удали данные приложения
Семь раз отмерь - поставь студию.
Эклипс не студия, ошибка вылетит - не исправишь.
Скажи мне кто твой друг, и оба поставили студию.
Студия - свет, а эклипс - тьма.

incbot
Сообщения: 2
Зарегистрирован: 03 мар 2016, 16:35

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

Сообщение incbot » 11 мар 2016, 01:46

Все очень доходчиво как обычно. Но есть вопрос. В предыдущем (36 уроке) в обработке клика был такой код:

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

 //если курсор содержит записи из выборки
        if(c != null) {
            //перейти на первую
            if(c.moveToFirst()) {
                String str;
                //цикл по всем записям курсора
                do {
                    str = "";
                    //Для каждой записи перебираем названия полей getColumnNames
                    //(аналог foreach в других языках)
                    for(String cn : c.getColumnNames()) {
                        //формируем строку вывода из таблицы
                        str = str.concat(cn + " = " + c.getString(c.getColumnIndex(cn)) + "; ");
                    }
                    Log.d(LOG_TAG, str);
                } while (c.moveToNext());
            }
            //закрыть курсор и очистить ресурсы
            c.close();
        } else Log.d(LOG_TAG, "Cursor is null");
Из которого видно, что если в курсоре ничего нет, то мы его и не закрываем... В 37 уроке (если например задать гигантскую зарплату в первом join запросе) мы закроем и курсор, который ничего не вернул. Причем это корректно работает и там и там. Как правильнее то? (подозреваю что как в 37 уроке)? Память в 36 уроке "не течет"? Поправить в уроках ничего часом не надо?

Inok13
Сообщения: 1
Зарегистрирован: 27 ноя 2016, 23:12

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

Сообщение Inok13 » 27 ноя 2016, 23:25

Столкнулся с ошибкой. Для анализа скопировал весь код урока, но ситуация не изменилась. Ошибка такого рода:

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

 Caused by: android.database.sqlite.SQLiteException: no such column: PS.name (code 1): , while compiling: 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 > ?
. Внимание вопрос: Что я делаю не так? и Как это исправить?!

vital8111
Сообщения: 3
Зарегистрирован: 15 мар 2017, 15:26

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

Сообщение vital8111 » 16 мар 2017, 10:21

А где, простите, foreign key?

Konstantin1979
Сообщения: 1
Зарегистрирован: 29 окт 2017, 07:53

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

Сообщение Konstantin1979 » 29 окт 2017, 08:06

При выводе в лог выводится не вся информация, заканчивается сообщением --- Table people ---

10-29 04:38:31.693 3752-3752/? D/myLogs: --- Table position ---
10-29 04:38:31.694 3752-3752/? D/myLogs: id = 1; name = Директор; salary = 15000;
10-29 04:38:31.694 3752-3752/? D/myLogs: id = 2; name = Программер; salary = 13000;
10-29 04:38:31.694 3752-3752/? D/myLogs: id = 3; name = Бухгалтер; salary = 10000;
10-29 04:38:31.694 3752-3752/? D/myLogs: id = 4; name = Охранник; salary = 8000;
10-29 04:38:31.694 3752-3752/? D/myLogs: --- ---
10-29 04:38:31.694 3752-3752/? D/myLogs: --- Table people ---

И мой вручную набитый код и скопированный с сайта с уроком дает такой результат.
Что нужно сделать чтобы получить полный лог?

antonvigre
Сообщения: 1
Зарегистрирован: 30 окт 2017, 17:26

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

Сообщение antonvigre » 30 окт 2017, 17:28

Konstantin1979 писал(а):При выводе в лог выводится не вся информация, заканчивается сообщением --- Table people ---

10-29 04:38:31.693 3752-3752/? D/myLogs: --- Table position ---
10-29 04:38:31.694 3752-3752/? D/myLogs: id = 1; name = Директор; salary = 15000;
10-29 04:38:31.694 3752-3752/? D/myLogs: id = 2; name = Программер; salary = 13000;
10-29 04:38:31.694 3752-3752/? D/myLogs: id = 3; name = Бухгалтер; salary = 10000;
10-29 04:38:31.694 3752-3752/? D/myLogs: id = 4; name = Охранник; salary = 8000;
10-29 04:38:31.694 3752-3752/? D/myLogs: --- ---
10-29 04:38:31.694 3752-3752/? D/myLogs: --- Table people ---

И мой вручную набитый код и скопированный с сайта с уроком дает такой результат.
Что нужно сделать чтобы получить полный лог?
Абсолютно аналогичная ситуация.

Ответить