Урок 36. SQLite. Подробнее про метод query. Условие, сортировка, группировка

Обсуждение уроков
Roman
Сообщения: 22
Зарегистрирован: 23 авг 2012, 08:43

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение Roman » 11 сен 2012, 11:09

Добрый день!
Спасибо за уроки
Есть вопрос: в прошлом уроке мы сразу обращались к базе для считывания данных без присваивания

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

Cursor c = null;
в чем может быть проблема если я не укажу

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

Cursor c = null;
, а сразу напишу

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

Cursor c = db.query("mytable", columns, null, null, null, null, null);
вопрос возник потому что, когда уже есть база в прошлом уроке (повторно вызываем приложение) и мы делаем запрос всех данных из таблицы mytable то все равно получаем всю таблицу вне зависимости какое знаение у Cursor.
Спасибо!

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

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение rezak90 » 11 сен 2012, 11:22

собственно не понял в чём заключается вопрос. Разницы между объявлением Cursor'a как c = null и сразу выполнения запроса нету. В успешном случае query вернёт результат, в противном случае вернёт null.
R.id.team
Политика на форуме запрещена

Roman
Сообщения: 22
Зарегистрирован: 23 авг 2012, 08:43

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение Roman » 11 сен 2012, 11:52

rezak90 писал(а):Разницы между объявлением Cursor'a как c = null и сразу выполнения запроса нету. В успешном случае query вернёт результат, в противном случае вернёт null.
Спасибо! Зато мне ваш ответ прояснил ситуацию: "разницы нет" :)))

Возник еще один вопрос по поводу "sum(people) as people" в

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

columns = new String[] { "region", "sum(people) as people" };
правильно ли я понимаю это расшифровывается как "сумма данных people по столбцу people"? Где возможно почитать какие формы возможно записывать (искал на http://developer.android.com но ничего путнего не сумел найти)?

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

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение rezak90 » 11 сен 2012, 11:57

правильно ли я понимаю это расшифровывается как "сумма данных people по столбцу people"?
да всё верно. На счёт почитать по какой тематики? если по запросам то это в сторону sql языка.
R.id.team
Политика на форуме запрещена


Overdos
Сообщения: 33
Зарегистрирован: 09 авг 2012, 20:58
Откуда: Краснодар

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение Overdos » 14 сен 2012, 16:08

:idea:
Последний раз редактировалось Overdos 14 сен 2012, 16:20, всего редактировалось 1 раз.

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

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение rezak90 » 14 сен 2012, 16:18

он же тебе пишет having cannot be resolved to a variable - нету такой переменной, или же она есть но не инициализирована
R.id.team
Политика на форуме запрещена

Overdos
Сообщения: 33
Зарегистрирован: 09 авг 2012, 20:58
Откуда: Краснодар

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение Overdos » 14 сен 2012, 17:26

Блин, Люди!!! Ну что за ...? Я новичок - да! но делаю все упражнения точь в точь, и бывает что не получается...
Сделал 36 урок ошибок нет , а при запуске ни чего не работает!вот ошибки:

Изображение
Изображение
Изображение

как я понимаю таблица с БД не создается, хотя и прописаны все методы.а еще красным написано что то с далвиком машиной связано ... помогите , если можно подробно! заранее спасибо ! )

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

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение rezak90 » 14 сен 2012, 18:59

здесь все новички, просто кто то до этого программировал на других языках и называются "новичками", а кто то не знает ни одного ЯП и называются они "зелёные новички" =)
на счёт ошибки. Я понимаю новичок, но хотя бы английский понять можно или в гуглтранслейт зайти и перевести. Там написано что это синтаксическая ошибка и не может понять from. Соответственно идём в эту запись и видим что у тебя: SELECT FROM mytable. Это от не знания sql-языка. после SELECT идёт перечисления столбцов в которых происходит выборка, если же поставить звёздочку * (будет выглядить так: SELECT * FROM mytable) то выборка происходит из всей таблицы.
З.Ы. тебя никто не пинает, это хорошо когда люди не молчат и задают вопросы и стыдного в этом ничего нету.
R.id.team
Политика на форуме запрещена

Overdos
Сообщения: 33
Зарегистрирован: 09 авг 2012, 20:58
Откуда: Краснодар

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение Overdos » 14 сен 2012, 19:28

Спасибо большое! но не понимаю куда эту звездочку поставить ??? в коде нет такого ..((

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

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение rezak90 » 14 сен 2012, 22:32

действительно нету, ну может ошибка где то в db.query, в самом запросе.
R.id.team
Политика на форуме запрещена

Аватара пользователя
neoksi
Сообщения: 712
Зарегистрирован: 26 июл 2012, 10:42
Контактная информация:

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение neoksi » 14 сен 2012, 23:58

Ну вообще-то оно само должно подставлять, список колонок задается в массиве columns, наверное, где-то там ошибка.

Overdos
Сообщения: 33
Зарегистрирован: 09 авг 2012, 20:58
Откуда: Краснодар

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение Overdos » 15 сен 2012, 17:05

Вроде все правильно написано с : db.query и columns .. есть еще домыслы ? ) делал все как в уроке.

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

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение rezak90 » 15 сен 2012, 17:32

columns наверное пустой
R.id.team
Политика на форуме запрещена

Overdos
Сообщения: 33
Зарегистрирован: 09 авг 2012, 20:58
Откуда: Краснодар

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение Overdos » 15 сен 2012, 18:36

String[] columns = null; ???

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

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение rezak90 » 15 сен 2012, 19:00

Overdos писал(а):String[] columns = null; ???
ну наверное, раз между select и from ничего нету.
R.id.team
Политика на форуме запрещена

top
Сообщения: 14
Зарегистрирован: 22 июн 2012, 06:09

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение top » 27 сен 2012, 12:48

Есть такой вопрос, к которому не могу найти решения.
При открытии программы проверяется таблица, есть ли у нее значение, а именно текущая дата,
если нет то она вставляется в таблицу
код программы:

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

public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        tv=(TextView)findViewById(R.id.tv);    
        edt=(EditText)findViewById(R.id.edt);
        but=(Button)findViewById(R.id.but);
        but.setOnClickListener(this);
        edt.requestFocus();
         
	    mdb= new createdb(this);
		//открытие БД
	    db = mdb.getWritableDatabase();
	    
	
	  Cursor c_cd = null;
	  c_cd =  db.query(TABLE_NAME, new String[]{DATE },ID+" =2 and "+DATE+" =?",new String[]{sdf.format(d)},null,null,null); 
	      
	 if (c_cd.getCount()==0)
{	 
 mdb.insert_v(2,0.0f,Integer.parseInt(sdf.format(d)),db); // это функция, которая   вставляет данные в таблицу.
	  		
	  }
затем данные таблицы выводятся на экран в ListView

при первоначальном открытии приложения выдается ошибка java.NullPointerException
, при повторном открытии ошибки уже нет и данные есть в таблице и они выводятся на экран( т.е. данные с текущей датой)

если меняю if (c_cd.getCount()==0) на if (c_cd==null) , то этот участок кода полностью пропускается при первом открытии и соответственно ничего не вставляется в таблицу, но приложение никаких ошибок не выдает.

как мне кажется курсор c_cd после выполнения запроса не является null, даже когда запрос выдает пустой результат, но тогда почему получается ошибка при сравнении (c_cd.getCount()==0) ?
Если предположить, что c_cd все таки остается null, тогда не понятно почему пропускается
условие if (c_cd==null)

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

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение rezak90 » 27 сен 2012, 14:02

пойдите в класс createdb и проследите что происходит в методе query, что именно даёт null.
P.S.
текущая дата
у sqlite есть прекрасные методы для работы с датой, которые в том числе дают возможность сравнения а так же формат вывода и не придётся изобретать вот это

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

new String[]{sdf.format(d)
R.id.team
Политика на форуме запрещена

top
Сообщения: 14
Зарегистрирован: 22 июн 2012, 06:09

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение top » 27 сен 2012, 17:21

Класс createdb наследует SQLiteOpenHelper.
На самом деле при первом открытии эта функция должна давать null
,т.к. текущей даты в таблице еще нет. Она должна как бы автоматически заполниться.
Вопрос почему программа вылетает при сравнении
if (c_cd.getCount() ==0) ? И полностью игнорирует условие if (c_cd==null)?

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

Re: Урок 36. SQLite. Подробнее про метод query. Условие, сор

Сообщение rezak90 » 27 сен 2012, 17:49

if (c_cd.getCount() ==0) - будет вылетать если курсор равен null, то есть инициализация объекта не была произведена.
И полностью игнорирует условие if (c_cd==null)? не знаю, возможно попробуйте проверять методом isNull
R.id.team
Политика на форуме запрещена

Ответить