записи, вставленные в таблицу sqlite, одинаковы для каждой строки - PullRequest
0 голосов
/ 14 апреля 2019

У меня есть JSONArray, который содержит много записей. Я хочу сравнить строку внутри этих объектов с похожей (я знаю, что она имеет то же значение) записью в моей базе данных SQLite. но когда я зацикливаю таблицу, каждое значение строки имеет первое значение строки.

ВСТАВИТЬ ЗАПИСЬ В БД >> возвращает различное значение

        ArrayList<String> fieldsNameTasse = new ArrayList<String>();
        ArrayList<String> fieldsValueTasse= new ArrayList<String>();



        for (int i = 0; i < pagamenti.length(); i++) {

            JSONObject row = pagamenti.getJSONObject(i); /** LOOP OGGETTI */

            String fattura = row.getString("Fattura");
            String descrizione = row.getString("Descrizione");
            String scadenza = row.getString("Data Scadenza");
            String importo = row.getString("Importo");
            String stato = row.getString("Stato Pagamento");


            // FATURA SHOW ALL DIFFRERENtS VALUE CORRECTLY
            fieldsNameTasse.add("fattura");
            fieldsValueTasse.add(fattura);
            Toast.makeText(getContext(), fattura.toString(), Toast.LENGTH_LONG).show();

            fieldsNameTasse.add("descrizione");
            fieldsValueTasse.add(descrizione);

            fieldsNameTasse.add("scadenza");
            fieldsValueTasse.add(scadenza);

            fieldsNameTasse.add("importo");
            fieldsValueTasse.add(importo);

            fieldsNameTasse.add("stato");
            fieldsValueTasse.add(stato);

            DBmanager.insert("TasseIncoming", fieldsNameTasse, fieldsValueTasse);


        } 

CHECK DB ROW VALUE << всегда возвращает первое значение </p>

        /** SHOW ALWAYS THE SAME VALUE*/
        int counter = 0;
        Cursor cursor = DBmanager.readAll("TasseIncoming");
        while(cursor.moveToNext()) {
            String ffattura = cursor.getString(cursor.getColumnIndex("fattura"));
            counter++;
            Toast.makeText(getContext(), ffattura+" - "+counter, Toast.LENGTH_LONG).show();
        }

1 Ответ

1 голос
/ 14 апреля 2019
 ArrayList<String> fieldsNameTasse = new ArrayList<String>();
 ArrayList<String> fieldsValueTasse= new ArrayList<String>();
 for (int i = 0; i < pagamenti.length(); i++) {
   // add stuff to the above arraylists
   DBmanager.insert("TasseIncoming", fieldsNameTasse, fieldsValueTasse);
}

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

sqlite> create table foo(a, b);
sqlite> insert into foo(a,b,a,b) values(1,2,3,4);
sqlite> select * from foo;
a           b         
----------  ----------
1           2         

указывает, что когда столбец включается несколько раз в INSERT, используется только первое соответствующее значение. Следовательно, получаются только значения из первой итерации цикла.

Простое решение - переместить определения переменных в цикл, поэтому каждая вставка выполняется с новым набором столбцов и значений:

 for (int i = 0; i < pagamenti.length(); i++) {
   ArrayList<String> fieldsNameTasse = new ArrayList<String>();
   ArrayList<String> fieldsValueTasse= new ArrayList<String>();
   // add stuff to the above arraylists
   DBmanager.insert("TasseIncoming", fieldsNameTasse, fieldsValueTasse);
}
...