Страница 1 из 1
Определение идентификатора
Добавлено: 14 сен 2014, 17:38
WindStraider
Здравствуйте. Подскажите пожалуйста.
У меня есть таблица с одной колонкой где написаны имена людей.
----------------
1 Мила
12 Лима
56 Лола
78 Кора
----------------
Тут показан уникальный идентификатор каждой записи.
Как програма может узнать значение уникального идентификатора , по определённому имени.
Например пользователь выбрал "Лола". Дальше нужно как то оперделить ее уникальный идентификатор для дальнейшей работы с этой строкой.
Help me please.
Re: Определение идентификатора
Добавлено: 14 сен 2014, 19:01
Mikhail_dev
В вашем случае, надо вытаскивать с вашей строки нужный вам идентификатор, например по пробелу. Т.е. берете строку
String[] parts = yourString.split(" ");
String identificator = parts[0];
вот весь код. Вы разделяете строку на части по пробелы, получаете массив.
Но это неправильный подход, создайте базу и сделайте отдельно поле для id И поле для имён.
Re: Определение идентификатора
Добавлено: 14 сен 2014, 19:17
WindStraider
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); //Удаляем строку
Что бы удалить строку , нужно как то узнать её "уникальный идентиикатор". Допустим нам нужно удалить строку с записью "Лола" , но мы не знаем" уникальный идентификатор" этой строки. Как можно узнать
"уникальный идентификатор" , по содержанию текстовой информацыи в строке?
Re: Определение идентификатора
Добавлено: 19 сен 2014, 11:43
razmus
А чем вам не подходит? db.delete("TABLE_NAME", "COLUMN" + " = " + some_data + "", null);
Не обязательно привязываться к _id
З.Ы.
Хотя костыль конечно..
Re: Определение идентификатора
Добавлено: 19 сен 2014, 15:31
altwin
WindStraider писал(а):Здравствуйте. Подскажите пожалуйста.
У меня есть таблица с одной колонкой где написаны имена людей.
----------------
1 Мила
12 Лима
56 Лола
78 Кора
----------------
Тут показан уникальный идентификатор каждой записи.
Как програма может узнать значение уникального идентификатора , по определённому имени.
Например пользователь выбрал "Лола". Дальше нужно как то оперделить ее уникальный идентификатор для дальнейшей работы с этой строкой.
Help me please.
Если имена уникальные - 'SELECT _id FROM mytable WHERE name=Лола' отдаст то, что нужно по имени. Можно выводить данные не из массива а из хэша, где ключем будет _id уже полученный и всегда известный.
P.S. в любом случае лучше добавлять дополнительный ключ, к примеру email, уникальный для каждой записи.
Re: Определение идентификатора
Добавлено: 19 сен 2014, 18:13
Foenix
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]
Re: Определение идентификатора
Добавлено: 19 сен 2014, 18:21
Foenix
Артем вообще меня убил!

Re: Определение идентификатора
Добавлено: 20 сен 2014, 10:41
altwin
Foenix писал(а):Артем вообще меня убил!

В чем разница между моим ответом и твоими подробностями я пока не понял, поскольку именно о выборе id я и говорил, но судя по выражению глаз у котэ - все ок

А по поводу курсоров - я же говорю - не пользуюсь я ими. Мне нравится писать sql код и более того я люблю контролировать все. Мне не нужны неявные запросы к базе и я должен четко видеть структуру запроса и время его выполнения. Я всегда получаю данные одним запросом и помещаю их в промежуточные хранилища выполняя всю логику работы с ними до того как к ним будет обращаться поток учавствующий в отображении.

Re: Определение идентификатора
Добавлено: 20 сен 2014, 11:48
Foenix
мало что поняла, честно говоря, начиная со слов "неявные"

А что такое неявный запрос?
Re: Определение идентификатора
Добавлено: 20 сен 2014, 12:33
altwin
Foenix писал(а):мало что поняла, честно говоря, начиная со слов "неявные"

А что такое неявный запрос?
не обращай внимание, это у меня от оракловских неявных курсоров осталось, суть в том, что работа с базой тут происходит за кадром, а это плохо, потому как в каждом случае запросы выполняются по разному и написав их руками ты 101% сделаешь лучше.
Re: Определение идентификатора
Добавлено: 20 сен 2014, 12:58
Foenix
я не поняла связи вообще
я всегда пишу запросы руками

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

Re: Определение идентификатора
Добавлено: 20 сен 2014, 13:28
altwin
Foenix писал(а):я не поняла связи вообще
я всегда пишу запросы руками

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

Просто мне не нравится курсор. И вообще весь google, ну вот в данном случае, нафига им был нужен этот курсор если есть уже много лет -
http://docs.oracle.com/javase/8/docs/ap ... l/Set.html
Re: Определение идентификатора
Добавлено: 20 сен 2014, 14:06
Foenix
Интересно, автор определил свой идентификатор?

Re: Определение идентификатора
Добавлено: 20 сен 2014, 14:08
altwin
Foenix писал(а):Интересно, автор определил свой идентификатор?

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

Re: Определение идентификатора
Добавлено: 08 окт 2014, 07:14
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});
Re: Определение идентификатора
Добавлено: 08 окт 2014, 09:53
KamiSempai
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]
Re: Определение идентификатора
Добавлено: 08 окт 2014, 10:24
Foenix
grem17 писал(а):столкнулся с такой же проблемой, ListView заполняется из SQL базы
когда кликаю по строке ListView - из SQl должна удалиться строка, но как узнать идентификатор SQL?
понял что надо передать ID в адаптер и считывать его при клике по строке, но не понимаю как это сделать
сейчас сделано вот так
я не понимаю - что именно в моих объяснениях было не понятно?
вы делаете по-своему и не понимаете сами себя.
Re: Определение идентификатора
Добавлено: 08 окт 2014, 11:16
grem17
Foenix писал(а):grem17 писал(а):столкнулся с такой же проблемой, ListView заполняется из SQL базы
когда кликаю по строке ListView - из SQl должна удалиться строка, но как узнать идентификатор SQL?
понял что надо передать ID в адаптер и считывать его при клике по строке, но не понимаю как это сделать
сейчас сделано вот так
я не понимаю - что именно в моих объяснениях было не понятно?
вы делаете по-своему и не понимаете сами себя.
все, разобрался, получилось, спасибо
почему то думал что после выборки в курсор все эти данные надо обязательно сопоставить с адаптером...
перечитал ваше сообщение еще на несколько раз и понял что работаем то мы в дальнейшем не с адаптером, а напрямую с курсором
Re: Определение идентификатора
Добавлено: 08 окт 2014, 11:54
Foenix
да, разберитесь в архитектуре приложения. я ее тоже описывала - вьюшка, адаптер, данные. Адаптер нужен для поставления данных вьюшке, и все.