在 sqlite 表中插入的记录对于每一行都是相同的
Posted
技术标签:
【中文标题】在 sqlite 表中插入的记录对于每一行都是相同的【英文标题】:records inserted in a sqlite table are the same for each row 【发布时间】:2019-09-04 10:55:40 【问题描述】:我有一个包含许多记录的 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);
CHECK 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
s 的当前内容,或者只是将它们的定义移动到循环内?
好的。这就是解决方案!非常感谢。如果您发布它,我将标记为正确答案。
【参考方案1】:
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
s 中已有内容的末尾添加值。所以有很多重复的列名,每个列名都有不同的值。一些快速测试:
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 表中插入的记录对于每一行都是相同的的主要内容,如果未能解决你的问题,请参考以下文章