插入sqlite表的记录对于每一行都是相同的

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了插入sqlite表的记录对于每一行都是相同的相关的知识,希望对你有一定的参考价值。

我有一个包含许多记录的JSONArray。我想将这些对象中的字符串与我的SQLite数据库中的类似(我知道它具有相同的值)记录进行比较。但是当我循环表时,每个行值都有第一行值。

INSERT A RECORD TO DB >>它返回不同的值

        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);


        } 

检查DB ROW VALUE <<它始终返回第一个值

        /** 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();
        }
答案
 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);
}

每次循环时,你只是在那些ArrayLists中已经存在的值的末尾添加值。因此,有许多重复的列名称,每个名称具有不同的值。一些快速测试:

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);
}

以上是关于插入sqlite表的记录对于每一行都是相同的的主要内容,如果未能解决你的问题,请参考以下文章

使用 Django 将数千条记录插入 SQLite 表的有效方法是啥?

VC 读取SQLite数据库中的表的数据,该怎么解决

雪花我们如何遍历临时表的每一行并将其值插入到另一个表中,其中每个字段的值都是单行?

SQLite 或 FMDB 无法找到包含某些字符的行

如果它已经在表中,如何不在sqlite中记录[关闭]

在反应状态引擎中,如何为结果表的每一行生成唯一的 UUID?