Вставьте массив в базе данных SQLite в Android

8

Я хочу сохранить будние дни в базе данных, поэтому я решил сохранить его, назначив значение int каждый день. то есть

1 → Выбрано, 0 → Не выбрано.

Понедельник = 0/1

Вторник = 0/1

. , , , .

Воскресенье = 0/1.

Но это сделает 7 столбцов в DB. Поэтому я подумал, может ли кто-нибудь помочь мне с этим, если я должен сохранить его в одном массиве и получить значения для дальнейшего использования. Я читал несколько примеров через Интернет, но не получил его в простой форме.

  • 1
    если вы хотите сохранить массив в одном столбце, поместите значение за все дни в массив json и сохраните его в базе данных.
Теги:
arraylist

4 ответа

10
Лучший ответ

Чтобы вставить 7 значений в один столбец, вы можете использовать разделитель запятой, подобный этому

где Total_Score_P1 - это строковый массив

//строковый массив

String[]  Total_Score =  new String[] { p1e1,p1e2,p1e3,p1e4,p1e5,p1e6 };


// Convderting it into a single string 

String result_ScoreP1 = ("" + Arrays.asList(Total_Score_P1)).
             replaceAll("(^.|.$)", "  ").replace(", ", "  , " );

result_ScoreP1 будет

//вывод этого

result_ScoreP1 = "p1e1,p1e2,p1e3,p1e4,p1e5,p1e6";

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

//список строковых массивов

//запрос запущен

public ArrayList<String> rulTable(String id) {
        // TODO Auto-generated method stub
        ArrayList<String> Ruleob = new ArrayList<String>();

        Cursor c_rule;

        try
        {
            c_rule = db.query(NameTable, new String[]{
                    columns1        
            },
            Rule_COurseID + "=" + id ,
                              null, null, 
                              null, null, null);

            c_rule.moveToFirst();

            // if there is data available after the cursor pointer, add
            // it to the ArrayList that will be returned by the method.
            if (!c_rule.isAfterLast())
            {
                do
                {

                    Ruleob.add(c_rule.getString(0));

                }
                while (c_rule.moveToNext());
            }

            // let java know that you are through with the cursor.
            c_rule.close();
        }
        catch(Exception e)
        {


        }
        return Ruleob;


    }


//list to get elements 

 ArrayList<String>  ListOne = new ArrayList<String>();

ArrayList<String> row ;

    try{
// received values
        row = db.TheTable(id);
        String r1 = row .get(0);

}

catch(Exception e)

{

}


 StringTokenizer st2 = new StringTokenizer(r1, "||");

            while(st2.hasMoreTokens()) {
            String Desc = st2.nextToken();
               System.out.println(Desc+ "\t" ); 
            ListOne.add(Desc); 

//   
            }
5

Вы можете использовать двоичное целое число 1 = выбрано 0 = Не выбрано (1111111) (0000000)

всего семь дней, поэтому индекс 0 = mon, 1 = tues, 2 = wed, 3 = thurs, 4 = friday, 5 = sat, 6 = sunday..and so on..

здесь 1111111 означает, что выбран весь день, 0000000 весь день не выбран, 0001000 выбран только в четверг.

  • 0
    да, я знаю, но это будет то же самое, что я делаю сейчас, любая идея, если мы можем использовать массив / массив данных в БД, как я должен был использовать те дни, чтобы включить Alarm ON в моем приложении.
  • 0
    Вы можете установить сигнал тревоги с помощью этой концепции, не имеет большого значения.
3

Я также обнаружил способ, т.е. преобразовываю ваши так называемые значения в JSON Array, а затем сохранил полную строку JSON в сущности/поле в базе данных.

Это помогает легко и эффективно обслуживать ценности.

2

Создайте еще одну таблицу со столбцом для каждого дня, логическое значение. Создайте связь с этой таблицей с помощью integer id (используйте внешний ключ). Это реляционный способ решения проблемы.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню