Продолжаю рубрику безответных вопросов на Stack overflow.
Имеем: DB.java
Cursor Positions (String str){
NAME = str;
cursor = mDB.rawQuery("SELECT * FROM TABLE", null);
result = cursor.getColumnCount();
cursor.moveToFirst();
for (int k = 1; k < result; k++) {
cur = DB.rawQuery("SELECT _id," + NAME + " FROM TABLE WHERE A" + k + " = 1", null);
}
return cur;
}
Дано: NAME задаём сами, в данном случае я поставил BIT для удобства, n - аналогично.
MainActivity.java
cur4 = DB.Positions("BIT");
List<String>lt2 = new ArrayList<String>();
String add2 = null;
cur4.moveToFirst();
for (int i = 0; i < cur4.getColumnCount(); i++) {
add2 = cur4.getString(i);
lt2.add(add2);
}
ad2 = new ArrayAdapter<String>(getActivity(),R.layout.my_textview, lt2);
lv1.setAdapter(ad2);
Строку BIT необходимо записать в cursor с Ak = 1.
Предположим в в таблице содержится строка 0 1 0 1 1 0 0 0, после неизвестных мне манипуляций, мы получим cursor 1 1 1, что будет соответствовать А2, А4, А5.
Вариант реализации через List я уже практиковал, совсем недавно мне сказали, что данный метод, мягко говоря, ложный (через List несерьёзно работать с ListView, работай через cursor).
Поэтому сам вопрос, как это реализовать?
Например, если вы хотите хранить матрицы, то для этого правильней использовать такую структуру:
create table matrix (row, col, value);
и содержать она будет понятное дело значения по соответствующим координатам:
...
insert into matrix values (2,1,0);
insert into matrix values (2,2,1);
insert into matrix values (2,3,0);
insert into matrix values (2,4,1);
insert into matrix values (2,5,1);
insert into matrix values (2,6,0);
...
Если вы хотите именовать строки и столбцы, это можно сделать в отдельных таблицах:
create table rows (id, name);
create table cols (id, name);
и наполнить их:
...
insert into rows values (2,'BIT');
...
insert into cols values (1,'A1');
insert into cols values (2,'A2');
insert into cols values (3,'A3');
insert into cols values (4,'A4');
insert into cols values (5,'A5');
insert into cols values (6,'A6');
...
Запрос для вашего курсора:
select cols.name
from matrix m
join cols on m.col = cols.id
join rows on m.row = rows.id
where
m.value = 1 and rows.name='BIT';
В результате будет:
====
name
====
A2
A4
A5
ЗЫ Если имена строк и колонок можно вычислить, то можно их не хранить, а вычислять в запросе или в постобработке: в коде.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости