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

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

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

Сообщение KamiSempai » 28 ноя 2013, 17:00

Объясните, что делается в этой строке:
String s = (String) result.get(rand.nextInt(engColIndex));
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

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

Сообщение -Alex- » 29 ноя 2013, 10:53

KamiSempai писал(а):Объясните, что делается в этой строке:
String s = (String) result.get(rand.nextInt(engColIndex));
В этой строке я для s выбираю из заполненного массива result случайное значение.
В результате мне выдается null, хотя Log.d(LOG_TAG, "result = " + result) показывает, что данные существуют.

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

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

Сообщение WizikTLT » 29 ноя 2013, 11:43

Может быть проблема в
String s = (String) result.get(rand.nextInt(engColIndex));

у тебя ключ в Map result является String
а тут ты пытаешься искать по типу Int т.к rand.nextInt(engColIndex) возвращает Int.
Попробуй обернуть это все в result.get(String.valueof(rand.nextInt(engColIndex)))

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

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

Сообщение -Alex- » 29 ноя 2013, 13:37

Не помогло. Думается мне, что я совсем не то делаю.
Может подскажете какой-нибудь другой способ засунуть данные из ДБ в массив и потом считать 1 рандомное значение из массива при нажатии кнопки.

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

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

Сообщение KamiSempai » 29 ноя 2013, 14:24

Не проще переводить позицию на случайную строку и читать данные прямо из курсора без переписывания в "массив"?

Кстати, я понял в чем ваша проблема. Вы думаете что HashMap - это массив, но это не совсем так.
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

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

Сообщение WizikTLT » 29 ноя 2013, 14:37

Хотелось бы увидеть
в каком виде ключи приходят вот тут -
result.put(c.getString(engColIndex), c.getString(rusColIndex));
----> c.getString(engColIndex)

и что приходит вот тут, когда ты делаешь result.get(rand.nextInt(engColIndex)); -
----> rand.nextInt(engColIndex)

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

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

Сообщение -Alex- » 29 ноя 2013, 15:05

Ладно, спасибо всем, кто откликнулся.
Понимаю, что зря начал учить программирование. Думаю, что это не моё. Не заточены мозги у меня под это дело.

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

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

Сообщение WizikTLT » 29 ноя 2013, 15:13

Рано сдаешься =)
Давай добьем эту проблему, а дальше решишь.

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

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

Сообщение -Alex- » 29 ноя 2013, 15:23

Да просто уже на себя зла не хватает и нервов из-за непонимания, как мне кажется, элементарных вещей, вот руки и опускаются.
Самое интересное, что если работать без базы данных, а задавать данные в массиве, то все получается, все работает как надо. То есть при нажатии кнопки выводятся новые данные на экран и сердце радуется :)
А вот с базой данных полная беда.
вот полный текст того, что я написал:

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

public class MainActivity extends Activity implements OnClickListener {


	Button btnMainFwd;
	TextView tvMainWord;
	TextView tvRusWord;

	DbHelper dbHelper;

	final String LOG_TAG = "myLogs";

	String[] masEngName = new String[] {};
	String[] masRusName = new String[] {};

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);
		if (getIntent().getBooleanExtra("finish", false))
			finish();

		btnMainFwd = (Button) findViewById(R.id.btnMainFwd);
		btnMainFwd.setOnClickListener(this);

		dbHelper = new DbHelper(this);

	}

	@Override
	public void onClick(View v) {

		SQLiteDatabase db = dbHelper.getWritableDatabase();

		Cursor c = db.query("mytable", null, null, null, null, null, null);

		switch (v.getId()) {
		case R.id.btnMainFwd:
			Log.d(LOG_TAG, "=== Читаем одну запись ===");

			int idColIndex = c.getColumnIndex("id");
			int engColIndex = c.getColumnIndex("engWord");
			int rusColIndex = c.getColumnIndex("rusWord");

			Map result = new HashMap<String, String>();

		
			if (c.moveToFirst()) {
				
				do {
					result.put(c.getString(engColIndex), c.getString(rusColIndex));

					Log.d(LOG_TAG, "result = " + result);

				} while (c.moveToNext());
				
				Random rand = new Random();
				for (int i = 0; i < 1; i++) {
					String s = (String) result.get(rand.nextInt(engColIndex));
					Log.d(LOG_TAG, "s = " + s);
				}
			} else
				Log.d(LOG_TAG, "0 rows");


			c.close();
			break;
		}
	}

	class DbHelper extends SQLiteOpenHelper {

		public DbHelper(Context context) {
			super(context, "DBWords", null, 1);
			// TODO Auto-generated constructor stub
		}

		@Override
		public void onCreate(SQLiteDatabase db) {
			// TODO Auto-generated method stub
			Log.d(LOG_TAG, "===Создаем новую ДБ===");

			db.execSQL("create table mytable ("
					+ "id integer primary key autoincrement," + "engWord text,"
					+ "rusWord text, " + "indLearn text" + ");");
		}

		@Override
		public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
			// TODO Auto-generated method stub

		}

	}

}

WizikTLT
Сообщения: 52
Зарегистрирован: 01 ноя 2013, 13:30

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

Сообщение WizikTLT » 29 ноя 2013, 15:49

Я тебе в личку скинул. Если что пиши туда

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

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

Сообщение Foenix » 29 ноя 2013, 18:27

-Alex- писал(а):Ладно, спасибо всем, кто откликнулся.
Понимаю, что зря начал учить программирование. Думаю, что это не моё. Не заточены мозги у меня под это дело.
Ты не представляешь сколько раз, когда я только за андроид взялась, у меня было ситуаций, когда я думала "это сделать невозможно", вот буквально страшно становилось, т.к. проект был коммерческий изначально. А потом находился выход.
Выход есть всегда, нужно просто не отчаиваться, а искать его, именно тот, правильный - в своем пространстве вариантов :)
Тут уже были такие, которые спотыкались на базах ;)
R.id.team

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

ragvarod
Сообщения: 19
Зарегистрирован: 03 дек 2013, 20:25

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

Сообщение ragvarod » 03 дек 2013, 20:27

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

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

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

Сообщение Foenix » 03 дек 2013, 21:25

Уроки почитать. И где вы в андроиде видели окна?
R.id.team

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

ragvarod
Сообщения: 19
Зарегистрирован: 03 дек 2013, 20:25

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

Сообщение ragvarod » 08 дек 2013, 20:26

Прошу прощения, не так выразился! Мне нужно результат запроса к БД вывести на экран к пользователю, как это лучше сделать? Как я сам понимаю, нужно работать с Spinner?

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

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

Сообщение Foenix » 08 дек 2013, 21:49

ого, это ж в уроках написано. Какой спиннер??
R.id.team

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

ragvarod
Сообщения: 19
Зарегистрирован: 03 дек 2013, 20:25

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

Сообщение ragvarod » 08 дек 2013, 21:54

Foenix писал(а):ого, это ж в уроках написано. Какой спиннер??
если не трудно можете дать ссылку на урок? спинер - выпадающий список..

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

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

Сообщение -Alex- » 10 дек 2013, 11:59

ragvarod писал(а):
Foenix писал(а):ого, это ж в уроках написано. Какой спиннер??
если не трудно можете дать ссылку на урок? спинер - выпадающий список..
думаю, что Вам надо не Spinner, а "Урок 42. Список - ListView".
ListView сможет отобразить на экране список данных из БД.

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

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

Сообщение -Alex- » 10 дек 2013, 13:28

Уважаемые гуру, подскажите пожалуйста следующий момент.
Какое условие необходимо задать в массиве, чтобы выбиралось определенное количество записей из него, например 10 записей?
Вот здесь создаю массив из данных БД:

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

                       if (c.moveToFirst()) {
			  do {
				row = new DbRows(c.getInt(idColIndex), c.getString(engColIndex), c.getString(rusColIndex));
				result.add(row);
			} while (c.moveToNext());
			Log.d(LOG_TAG, "количество записей = " + c.getCount());}
А как необходимо организовать следующий массив, в котором будет отбираться первые 10 записей из массива row?

Заранее благодарю за ответы!

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

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

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

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

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

Аватара пользователя
-Alex-
Сообщения: 30
Зарегистрирован: 26 ноя 2013, 09:40

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

Сообщение -Alex- » 10 дек 2013, 16:18

Foenix писал(а):отбирать нужное количество записей нужно прямо в запросе, а не манипулировать массивами
а не могли бы вы подсказать, какой параметр в запросе отвечает за выбираемое количество записей?
например, если для курсора я прописываю значение:
selection = "_id < 10";
то выбираются записи, у которых _id < 10, но это не то.
Мне надо бы какой-нибудь оператор, типа:
selection = "_id count == 10";

Можете подсказать, какой существует оператор, который мне помог бы в этом вопросе.

Заранее благодарен!
Последний раз редактировалось -Alex- 10 дек 2013, 16:44, всего редактировалось 1 раз.

Ответить