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

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

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

Сообщение Foenix » 10 дек 2013, 16:27

в конце запроса limit 5 например
R.id.team

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

TittTitov
Сообщения: 27
Зарегистрирован: 20 ноя 2013, 22:46

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

Сообщение TittTitov » 15 янв 2014, 12:32

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

Что означает восклицательный знак в строке if (c != null) { ? Спасибо!

Аватара пользователя
Mikhail_dev
Сообщения: 2386
Зарегистрирован: 09 янв 2012, 14:45
Откуда: Самара

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

Сообщение Mikhail_dev » 15 янв 2014, 12:38

В связке с равно это знак неравенства. Читайте основы Java, с такими вопросами изучение андроида будет кошмаром.

TittTitov
Сообщения: 27
Зарегистрирован: 20 ноя 2013, 22:46

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

Сообщение TittTitov » 15 янв 2014, 13:34

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


_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

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

Сообщение _ILYA_ » 02 фев 2014, 12:39

Ни как не могу разобраться с сортировкой. :o :?

В приложении буде БД вроде этой:

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

class DBHelper extends SQLiteOpenHelper
{
	public DBHelper(Context context)
	{
		super(context, "mydb", null, 1);
	}

	@Override
	public void onCreate(SQLiteDatabase db)
	{
		db.exsecSQL("create table mytable(" +
			"_id integer primary key autoincrement, " +
			"day integer, " +
			"month integer, " +
			"year integer, " +
			"mydata text" +
			");");
	}

} 

столбцы day, month, year -число, месяц, год.

1. нужно выводить все строки с определенным годом, например с 2014
2. нужно выводить все строки с определенным месяцем и годом, например 2 2014
3. нужно выводить все строки с определенным числом, месяцем и годом например 15 7 2013
При этом все это дело надо сортировать по убыванию, то есть сначала должны идти строки с датами наибольшего значения.

Если не трудно, объясните на примере кода. :?

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

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

Сообщение altwin » 02 фев 2014, 13:28

_ILYA_ писал(а):Ни как не могу разобраться с сортировкой. :o :?

В приложении буде БД вроде этой:

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

class DBHelper extends SQLiteOpenHelper
{
	public DBHelper(Context context)
	{
		super(context, "mydb", null, 1);
	}

	@Override
	public void onCreate(SQLiteDatabase db)
	{
		db.exsecSQL("create table mytable(" +
			"_id integer primary key autoincrement, " +
			"day integer, " +
			"month integer, " +
			"year integer, " +
			"mydata text" +
			");");
	}

} 

столбцы day, month, year -число, месяц, год.

1. нужно выводить все строки с определенным годом, например с 2014
2. нужно выводить все строки с определенным месяцем и годом, например 2 2014
3. нужно выводить все строки с определенным числом, месяцем и годом например 15 7 2013
При этом все это дело надо сортировать по убыванию, то есть сначала должны идти строки с датами наибольшего значения.

Если не трудно, объясните на примере кода. :?
[syntax=sql]SELECT column_name,column_name
FROM table_name
WHERE column_name operator value;[/syntax]
и все по такому примеру, для сортировки ORDER BY column_name DESC. Если по русски -sql вам нужен -это его задача.
Изображение

_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

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

Сообщение _ILYA_ » 02 фев 2014, 14:27

да читал я про это, как то абстрактно и не понятно, одна каша в голове.
Не могли бы вы привести код с методом query. Как это будет выглядеть с моим примером, я думаю сразу понятней будет и не только мне

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

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

Сообщение Foenix » 02 фев 2014, 14:47

разберись с уроком получше, там это все есть.
R.id.team

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

_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

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

Сообщение _ILYA_ » 02 фев 2014, 18:56

Foenix писал(а):разберись с уроком получше, там это все есть.
мне не понятно в каком порядке, в условие, записывать число, месяц, год.
Может я и не прав но там пример не совсем удачный, весь день голову ломаю.
Если не трудно объясните на примере моей программы, если не трудно конечно.

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

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

Сообщение Foenix » 02 фев 2014, 19:42

тогда почитай данную тему.
У тебя не правильно выбран способ хранения даты в таблице.
Хранить лучше двумя способами. Понятный - в формате "YYYYMMDD" и аутентичный, в формате int как число секунд даты (я забыла, кажется какой-то день 1971 го года). Все это было на форуме.
Если ничего не менять, в принципе, тоже можно. Примерно таким запросом.
select * from mytable where year = 2014 order by year desc, month decs,day desc
select *from mytable where month = 2 and year 2014 order by...
третий сам догадаешься
R.id.team

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

_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

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

Сообщение _ILYA_ » 03 фев 2014, 18:22

аутентичный, в формате int как число секунд даты (я забыла, кажется какой-то день 1971 го года).
Я то же думал об этом, но пожалуй так не пойдет, потому что все это дело надо будет в список вставить.
Понятный - в формате "YYYYMMDD"
а что это дает? и вообще что это, один или три столбца? какой тип, text или integer?

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

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

Сообщение altwin » 03 фев 2014, 18:46

_ILYA_ писал(а):Я то же думал об этом, но пожалуй так не пойдет, потому что все это дело надо будет в список вставить.
не понял сути? речь о unix timestamp на сколько я понял(время в секундах с полуночи 1 января 1970 года), т.е. имеет вид 1234567890, что мешает поместить это в список?
и вообще что это, один или три столбца? какой тип, text или integer?
это как бы date, вы просто определяете формат вывода, чтобы в дальнейшем было удобно работать, как например в вашем случае фильтруя по дате.
Изображение

_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

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

Сообщение _ILYA_ » 03 фев 2014, 19:06

не понял сути? речь о unix timestamp на сколько я понял(время в секундах с полуночи 1 января 1970 года), т.е. имеет вид 1234567890, что мешает поместить это в список?
в списке надо в формате
ДД ММ ГГГГ

Подскажите как правильней сделать, иначе боюсь криво получится

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

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

Сообщение Foenix » 03 фев 2014, 20:25

да оставь как есть и не парься, тебе ж не в гугл свой код сдавать?
при выводе на экран просто в select выбери что нужно day+month+year да и все
R.id.team

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

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

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

Сообщение altwin » 03 фев 2014, 21:27

Foenix писал(а):да оставь как есть и не парься, тебе ж не в гугл свой код сдавать?
при выводе на экран просто в select выбери что нужно day+month+year да и все
как бы если цель понять как работает, то в первую очередь следует разобраться, что такое timestamp и как его преобразовать в другой формат даты. Если проблема возникает на стадии хранения timestamp в списке и проблема в том, что не в том порядке год/месяц выводятся - нужно разбираться, дальше будет больше и понять уже будет на много труднее.
в списке надо в формате
ДД ММ ГГГГ
[syntax=java5]String timestamp = (DateFormat.format("dd-MM-yyyy hh:mm:ss", new java.util.Date()).toString());[/syntax]
Вы хотите быть программистом? вам определнно нужно разобраться, что происходит в это строке, объяснять проще не куда, просто не торопитесь, не понимаете, оставьте на завтра. Двигаться дальше нужно только тогда, когда пробелы заполненны.

P.S. тут совсем не много читать: http://ru.wikipedia.org/wiki/UNIX-%D0%B ... 0%BC%D1%8F
но научиться переводить время и дату в timestamp и обратно нужно обязательно, это значительно упрощает жизнь.

Еще не помешало бы пройти вот этот простенький, но очень полезный курс: http://sql.learncodethehardway.org/book/
Заодно и английский подтяните, а sql пригодится в жизни любого программиста.

[ОФФТОП]
И главное, если вам интересно разобраться в Android, почитайте: http://commonsware.com/Android/Android-3_7-CC.pdf
ничего лучше я не встречал, на оф сайте вы найдете более новые версии, книга доступна по подписке(не бесплатно) и рассмариваются все детали всех версий, осторожно, там более 2500 т. страниц... там раскрыто много нюансов пропущенных в документации(можно оценить качество примеров тут: https://github.com/commonsguy/cw-omnibus ).
Так же полезно почитать все перечисленное по ссылкам тут: http://www.reddit.com/r/androiddev/wiki/index
и просматривать темы тут: http://www.reddit.com/r/androiddev
Последний раз редактировалось altwin 03 фев 2014, 22:19, всего редактировалось 1 раз.
Изображение

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

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

Сообщение Foenix » 03 фев 2014, 22:18

ну жути нагнал ))
вообще-то нужно различать использование данного формата в java и в sqlite . Там это вовсе не timestamp называется. И дело тут не в том, чтоб получить заданную величину секунд и потом ее отформатировать (кстати, можно юзать класс Calendar), а чтоб В СПИСКЕ (читай "в курсор") получить отформатированную дату, чтоб потом ее вывести на экран. Для этого нужно юзать только функции sqlite.
В общем, почитаь можно тут http://sqlite.org/lang_datefunc.html
Вообще говоря, можно и не паритсья, как я сказала.
Есть еще куча разных способов форматнуть (или не форматировать :) )дату и вывести ее на экран)
R.id.team

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

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

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

Сообщение altwin » 03 фев 2014, 22:22

ну в Learn SQL the hard way, описанно, как работать с sqlite3 на практике, достаточно прочитать "книжку" выполнив простые упражнения все станет очевидно. unix timestamp это довольно общее понятие и знать его более, чем достаточно, чтобы понимать принцип остального... это как раз одна из частей фундаментальных "китов" :)
Вообще я привел выше книжку, прочитав ее -любой новичек может претендовать на уровень middle, проблем с стандартными задачами не будет вообще, но как бы главное читать внимательно :)
Кстати книжку эту стоит поискать на rutracker, там помоему версия 4.2 (это версия книги, последняя рассматриваемая версия Android 4.1 помоему.)была... хоть и не последняя но бесплатно, в ней должно быть не много более 1500 страниц.
Изображение

_ILYA_
Сообщения: 41
Зарегистрирован: 06 окт 2013, 11:49

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

Сообщение _ILYA_ » 04 фев 2014, 23:41

Ни как не врублюсь, почему падает приложение

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

return m_db.rawQuery("select *from " + DB_TABLE + " where COLUMN_YEAR = 2014" +
				" order by " + COLUMN_MONTH + " desc", null); 
так работает

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

return m_db.rawQuery("select *from " + DB_TABLE, null); 
DB_TABLE, COLUMN_YEAR, COLUMN_MONTH -строковые константы
Последний раз редактировалось _ILYA_ 04 фев 2014, 23:55, всего редактировалось 1 раз.

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

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

Сообщение altwin » 04 фев 2014, 23:46

_ILYA_ писал(а):Ни как не врублюсь, почему падает приложение

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

return m_db.rawQuery("select *from " + DB_TABLE + " where COLUMN_YEAR = 2014" +
				" order by, " + COLUMN_MONTH + " desc", null); 
так работает

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

return m_db.rawQuery("select *from " + DB_TABLE, null); 
DB_TABLE, COLUMN_YEAR, COLUMN_MONTH -строковые константы
COLUMN_YEAR = 2014, не хватает кавычек...
Изображение

Ответить