Определение идентификатора

SQLite, Preferences, файлы, SD, Content Provider, XML, JSON
Ответить
WindStraider
Сообщения: 9
Зарегистрирован: 10 сен 2014, 15:28

Определение идентификатора

Сообщение WindStraider » 14 сен 2014, 17:38

Здравствуйте. Подскажите пожалуйста.
У меня есть таблица с одной колонкой где написаны имена людей.

----------------
1 Мила
12 Лима
56 Лола
78 Кора
----------------
Тут показан уникальный идентификатор каждой записи.

Как програма может узнать значение уникального идентификатора , по определённому имени.
Например пользователь выбрал "Лола". Дальше нужно как то оперделить ее уникальный идентификатор для дальнейшей работы с этой строкой.

Help me please.

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

Re: Определение идентификатора

Сообщение Mikhail_dev » 14 сен 2014, 19:01

В вашем случае, надо вытаскивать с вашей строки нужный вам идентификатор, например по пробелу. Т.е. берете строку
String[] parts = yourString.split(" ");
String identificator = parts[0];
вот весь код. Вы разделяете строку на части по пробелы, получаете массив.

Но это неправильный подход, создайте базу и сделайте отдельно поле для id И поле для имён.

WindStraider
Сообщения: 9
Зарегистрирован: 10 сен 2014, 15:28

Re: Определение идентификатора

Сообщение WindStraider » 14 сен 2014, 19:17

Mikhail_dev писал(а):В вашем случае, надо вытаскивать с вашей строки нужный вам идентификатор, например по пробелу. Т.е. берете строку
String[] parts = yourString.split(" ");
String identificator = parts[0];
вот весь код. Вы разделяете строку на части по пробелы, получаете массив.

Но это неправильный подход, создайте базу и сделайте отдельно поле для id И поле для имён.
Я привел пример исходя из табици в базе SQlite. Эта база содержит в себе одну строку , для содержания имен. И уникальные идентификаторы для каждой строки , сформированные "INTEGER PRIMARY KEY AUTOINCREMENT".
Для того что бы мне удалить определённую строку , мне нужен "уникальный идентификатор" данной строки .

String SaySee3; //Тут должен быть записан уникальный идентификатор строки , которую мы собираемся удалить.
Log.i("Удаляем строку с идентификатором - ",SaySee3); //Выводи лог
sqdb.delete(myBase.TABLE_NAME, myBase._ID + " = " + SaySee3, null); //Удаляем строку

Что бы удалить строку , нужно как то узнать её "уникальный идентиикатор". Допустим нам нужно удалить строку с записью "Лола" , но мы не знаем" уникальный идентификатор" этой строки. Как можно узнать
"уникальный идентификатор" , по содержанию текстовой информацыи в строке?

razmus
Сообщения: 82
Зарегистрирован: 26 мар 2013, 10:47

Re: Определение идентификатора

Сообщение razmus » 19 сен 2014, 11:43

А чем вам не подходит? db.delete("TABLE_NAME", "COLUMN" + " = " + some_data + "", null);
Не обязательно привязываться к _id
З.Ы.
Хотя костыль конечно..

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

Re: Определение идентификатора

Сообщение altwin » 19 сен 2014, 15:31

WindStraider писал(а):Здравствуйте. Подскажите пожалуйста.
У меня есть таблица с одной колонкой где написаны имена людей.

----------------
1 Мила
12 Лима
56 Лола
78 Кора
----------------
Тут показан уникальный идентификатор каждой записи.

Как програма может узнать значение уникального идентификатора , по определённому имени.
Например пользователь выбрал "Лола". Дальше нужно как то оперделить ее уникальный идентификатор для дальнейшей работы с этой строкой.

Help me please.
Если имена уникальные - 'SELECT _id FROM mytable WHERE name=Лола' отдаст то, что нужно по имени. Можно выводить данные не из массива а из хэша, где ключем будет _id уже полученный и всегда известный.

P.S. в любом случае лучше добавлять дополнительный ключ, к примеру email, уникальный для каждой записи.
Изображение

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

Re: Определение идентификатора

Сообщение Foenix » 19 сен 2014, 18:13

WindStraider писал(а):Здравствуйте. Подскажите пожалуйста.
У меня есть таблица с одной колонкой где написаны имена людей.

----------------
1 Мила
12 Лима
56 Лола
78 Кора
----------------
Тут показан уникальный идентификатор каждой записи.

Как програма может узнать значение уникального идентификатора , по определённому имени.
Например пользователь выбрал "Лола". Дальше нужно как то оперделить ее уникальный идентификатор для дальнейшей работы с этой строкой.

Help me please.
Не слушай никого, они тебя путают и говорят не то.
Вот смотри.
У тебя есть таблица с двумя колонками, которые ты описал совершенно правильно. Я не знаю что именно ты делашь в программе, но допустим у тебя на экране список этих имен находится в листвью. Ты делаешь этот список на экран при помощи курсорадаптера, так? Так. Ты в этот курсор предварительно должен взять не только имена, но и _id!!
Теперь, тебе нужно удалить ту строчку, на которую кликнул юзер.
Ты пишешь обработку клика данной строки, но из адаптера (курсора) вытаскиваешь вовсе не имя , а _id!!! И в этом обработчике отправляешь команду в бд - удалить строку по ее _id так, как описано в уроках (например). Ни в коем случае удалять по имени или другим штукам нельзя! для этого и придумали уникальный айди, чтоб его везде тащить и везде по нему однозначно определять строку.

Точно так же, если юзер захотел поменять лену на катю и ткнул в лену, тебе вообще пофиг, что там лена была, тебе главное взять из курсора айди записи, куда он ткнул и сделать ей update. Надеюсь, понятно?


код примерно такой
[syntax=java5]MyListView.setOnItemClickListener(new OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> arg0, View arg1, int position, long arg3) {
Cursor cursor = lstAdapter.getCursor();
cursor.moveToPosition(position);
int _id = cursor.getInt(cursor.getColumnIndex("_id"));
И ТУТ УДАЛЯЕШЬ ПО ПОЛУЧЕННОМУ _id...............................................................................
}
}
[/syntax]
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: Определение идентификатора

Сообщение Foenix » 19 сен 2014, 18:21

Артем вообще меня убил!
Изображение
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: Определение идентификатора

Сообщение altwin » 20 сен 2014, 10:41

Foenix писал(а):Артем вообще меня убил!
Изображение
В чем разница между моим ответом и твоими подробностями я пока не понял, поскольку именно о выборе id я и говорил, но судя по выражению глаз у котэ - все ок :) А по поводу курсоров - я же говорю - не пользуюсь я ими. Мне нравится писать sql код и более того я люблю контролировать все. Мне не нужны неявные запросы к базе и я должен четко видеть структуру запроса и время его выполнения. Я всегда получаю данные одним запросом и помещаю их в промежуточные хранилища выполняя всю логику работы с ними до того как к ним будет обращаться поток учавствующий в отображении. :P
Изображение

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

Re: Определение идентификатора

Сообщение Foenix » 20 сен 2014, 11:48

мало что поняла, честно говоря, начиная со слов "неявные" ;)
А что такое неявный запрос?
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: Определение идентификатора

Сообщение altwin » 20 сен 2014, 12:33

Foenix писал(а):мало что поняла, честно говоря, начиная со слов "неявные" ;)
А что такое неявный запрос?
не обращай внимание, это у меня от оракловских неявных курсоров осталось, суть в том, что работа с базой тут происходит за кадром, а это плохо, потому как в каждом случае запросы выполняются по разному и написав их руками ты 101% сделаешь лучше.
Изображение

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

Re: Определение идентификатора

Сообщение Foenix » 20 сен 2014, 12:58

я не поняла связи вообще
я всегда пишу запросы руками :lol:
ты автора топика не путай, а то ведь он будет пытаться понять, что ты сказал - там до зависания недалеко :lol:
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: Определение идентификатора

Сообщение altwin » 20 сен 2014, 13:28

Foenix писал(а):я не поняла связи вообще
я всегда пишу запросы руками :lol:
ты автора топика не путай, а то ведь он будет пытаться понять, что ты сказал - там до зависания недалеко :lol:
Просто мне не нравится курсор. И вообще весь google, ну вот в данном случае, нафига им был нужен этот курсор если есть уже много лет - http://docs.oracle.com/javase/8/docs/ap ... l/Set.html
Изображение

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

Re: Определение идентификатора

Сообщение Foenix » 20 сен 2014, 14:06

Интересно, автор определил свой идентификатор? :)
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: Определение идентификатора

Сообщение altwin » 20 сен 2014, 14:08

Foenix писал(а):Интересно, автор определил свой идентификатор? :)
Он понял, что есть ли жизнь на марсе - вопрос не существенный, колличество звезд - решающий фактор. :mrgreen:
Изображение

grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Re: Определение идентификатора

Сообщение grem17 » 08 окт 2014, 07:14

столкнулся с такой же проблемой, ListView заполняется из SQL базы
когда кликаю по строке ListView - из SQl должна удалиться строка, но как узнать идентификатор SQL?

понял что надо передать ID в адаптер и считывать его при клике по строке, но не понимаю как это сделать

сейчас сделано вот так

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

ArrayList<HashMap<String, Object>> curList = new ArrayList<HashMap<String, Object>>();
					HashMap<String, Object> hm;
..................
Cursor cursor = SQLWorkDB.GetCursor(nameDB, null, null, null, null, null, null);
..................
					
					while (cursor.moveToNext()){
						int id = cursor.getInt(cursor.getColumnIndex(SQLWorkDB.c_tMain_ID));
						t1= cursor.getString(cursor.getColumnIndex(SQLWorkDB.c_tMain_test1));
						t2= cursor.getString(cursor.getColumnIndex(SQLWorkDB.c_tMain_test2));
						t3= cursor.getString(cursor.getColumnIndex(SQLWorkDB.c_tMain_test3));
						
						hm = new HashMap<String, Object>();
						hm.put("t1",t1);
						hm.put("t2",t2);
						hm.put("t3",t3);
						curList.add(hm);
					}
					cursor.close();
			
					// создаем адаптер
				    final MySimpleAdapter sAdapter = new MySimpleAdapter(this, curList, R.layout.lv_main, new String[] {"t1", "t2", "t3"},
							new int[] { R.id.tv_lv_main_test1, R.id.tv_lv_main_test2, R.id.tv_lv_main_test3});

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

Re: Определение идентификатора

Сообщение KamiSempai » 08 окт 2014, 09:53

grem17 писал(а):столкнулся с такой же проблемой, ListView заполняется из SQL базы
когда кликаю по строке ListView - из SQl должна удалиться строка, но как узнать идентификатор SQL?

понял что надо передать ID в адаптер и считывать его при клике по строке, но не понимаю как это сделать

сейчас сделано вот так

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

ArrayList<HashMap<String, Object>> curList = new ArrayList<HashMap<String, Object>>();
					HashMap<String, Object> hm;
..................
Cursor cursor = SQLWorkDB.GetCursor(nameDB, null, null, null, null, null, null);
..................
					
					while (cursor.moveToNext()){
						int id = cursor.getInt(cursor.getColumnIndex(SQLWorkDB.c_tMain_ID));
						t1= cursor.getString(cursor.getColumnIndex(SQLWorkDB.c_tMain_test1));
						t2= cursor.getString(cursor.getColumnIndex(SQLWorkDB.c_tMain_test2));
						t3= cursor.getString(cursor.getColumnIndex(SQLWorkDB.c_tMain_test3));
						
						hm = new HashMap<String, Object>();
						hm.put("t1",t1);
						hm.put("t2",t2);
						hm.put("t3",t3);
						curList.add(hm);
					}
					cursor.close();
			
					// создаем адаптер
				    final MySimpleAdapter sAdapter = new MySimpleAdapter(this, curList, R.layout.lv_main, new String[] {"t1", "t2", "t3"},
							new int[] { R.id.tv_lv_main_test1, R.id.tv_lv_main_test2, R.id.tv_lv_main_test3});
Вы делаете лишнюю работу переписывая Cursor в список HashMap. Используйте SimpleCursorAdapter. http://startandroid.ru/ru/uroki/vse-uro ... anija.html

И еще, судя по приведенному коду, у вас в список не попадает первый элемент массива. Курсоры лучше перебирать так:
[syntax=java5]if(cursor.moveToFirst()) do {
// Делаем что-то со строкой
} while (cursor.moveToNext());[/syntax]
R.id.team
Хватит таскать макулатуру на тренировку! Используй T Note.

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

Re: Определение идентификатора

Сообщение Foenix » 08 окт 2014, 10:24

grem17 писал(а):столкнулся с такой же проблемой, ListView заполняется из SQL базы
когда кликаю по строке ListView - из SQl должна удалиться строка, но как узнать идентификатор SQL?

понял что надо передать ID в адаптер и считывать его при клике по строке, но не понимаю как это сделать

сейчас сделано вот так
я не понимаю - что именно в моих объяснениях было не понятно?
вы делаете по-своему и не понимаете сами себя.
R.id.team

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

grem17
Сообщения: 85
Зарегистрирован: 16 сен 2014, 11:54

Re: Определение идентификатора

Сообщение grem17 » 08 окт 2014, 11:16

Foenix писал(а):
grem17 писал(а):столкнулся с такой же проблемой, ListView заполняется из SQL базы
когда кликаю по строке ListView - из SQl должна удалиться строка, но как узнать идентификатор SQL?

понял что надо передать ID в адаптер и считывать его при клике по строке, но не понимаю как это сделать

сейчас сделано вот так
я не понимаю - что именно в моих объяснениях было не понятно?
вы делаете по-своему и не понимаете сами себя.
все, разобрался, получилось, спасибо

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

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

Re: Определение идентификатора

Сообщение Foenix » 08 окт 2014, 11:54

да, разберитесь в архитектуре приложения. я ее тоже описывала - вьюшка, адаптер, данные. Адаптер нужен для поставления данных вьюшке, и все.
R.id.team

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

Ответить