当前位置: 代码迷 >> Android >> 哈希映射到数据库
  详细解决方案

哈希映射到数据库

热度:61   发布时间:2023-08-04 12:42:36.0

我将哈希图存储在数据库中,但是当哈希图中的项不止一个时,最后一个值会显示多次……例如,在哈希图中,我有

钢笔

但是当我获取值时,我得到了

我该如何解决?

数据库处理程序

public void addQuote(Quote q, ArrayList<HashMap<String, String>> put_q_list)
{
    myDataBase=this.getWritableDatabase();
  try{

   ContentValues values=new ContentValues();

  values.put("q_customer_name", q.getCustomer_name());
  values.put("q_customer_email", q.getCustomer_email());
  values.put("q_b_street", q.getBilling_street());
  values.put("q_b_city", q.getBilling_city());
  values.put("q_b_state", q.getBilling_state());
  values.put("q_b_zipcode", q.getBilling_zipcode());
  values.put("q_b_country", q.getBilling_country());
  values.put("q_s_street", q.getShipping_street());
  values.put("q_s_city", q.getShipping_city());
  values.put("q_s_state", q.getShipping_state());
  values.put("q_s_zipcode", q.getShipping_zipcode());
  values.put("q_s_country", q.getShipping_country());
  values.put("q_day", q.getDay());
  values.put("q_month", q.getMonth());
  values.put("q_year", q.getYear());
  values.put("q_total", q.getTotal());
  values.put("q_discount", q.getTotal_discount());

  myDataBase.insert("quote",null,values);

  }catch(Exception e)
  {
      Log.e("bderror",e.toString());
      e.printStackTrace();
  }

  String selectQuery = "SELECT quote_id FROM quote WHERE q_customer_email=?";
  Cursor cursor = myDataBase.rawQuery(selectQuery, new String[] {q.getCustomer_email()});
  int i=0;
  while(cursor.moveToNext())
    {
      i=cursor.getInt(0);
    }
  cursor.close();

  for (HashMap<String, String> map : put_q_list) {
       ContentValues cv = new ContentValues();
       cv.put("quote_id", i);
       cv.put("q_item_code", map.get("item_code_final"));
       cv.put("q_item_desc", map.get("desc_final"));
       cv.put("q_item_price", map.get("item_price_final"));
       cv.put("q_item_qty", map.get("item_qty_final"));
       cv.put("q_item_tax", map.get("item_tax_final"));
       cv.put("q_item_discount", map.get("item_discount_final")); 
       myDataBase.insert("q_item", null, cv);
    }

}

Add.java`

HashMap<String, String> map_item_final = new HashMap<String, String>();
        map_item_final.put("item_code_final",autoComplete_item.getText().toString());
        map_item_final.put("desc_final", item_desc.getText().toString());
        map_item_final.put("item_price_final", String.valueOf(item_price.getText()));
        map_item_final.put("item_tax_final",String.valueOf(item_tax.getText()));
        map_item_final.put("item_discount_final",String.valueOf(item_discount.getText()));
        map_item_final.put("item_qty_final", item_qty.getText().toString());
        final_items.add(map_item_final);

dataBase.addQuote(q,final_items);

正在检索...

public ArrayList<HashMap<String, String>> getQuoteItem(String quote_id) 
{
    ArrayList<HashMap<String, String>> put_list= new ArrayList<HashMap<String, String>>();

    myDataBase=this.getWritableDatabase();
    Cursor cursor=myDataBase.rawQuery("SELECT * from q_item where quote_id="+Integer.parseInt(quote_id),null);

    HashMap<String, String> map = new HashMap<String, String>();
while(cursor.moveToNext())
    {
               map.put("i_item_code", cursor.getString(1));
               map.put("i_item_desc", cursor.getString(2));
               map.put("i_item_price", String.valueOf(cursor.getInt(3)));
               map.put("i_item_qty", String.valueOf(cursor.getInt(4)));
               map.put("i_item_tax", String.valueOf(cursor.getFloat(5)));
               map.put("i_item_discount", String.valueOf(cursor.getInt(6)));
               put_list.add(map);
    }
 cursor.close();
 return put_list;

}

SQLite数据库浏览器

第一项变为空!!! 仅存储了最后一个项目[img]

请帮忙!!!!

我认为您的问题是add quote()中的这段代码:

int i=0; 
while(cursor.moveToNext()) { 
    i=cursor.getInt(0); 
}

您正在将游标中的值存储到一个int中,然后每次对其进行任何操作之前都将其覆盖。

while循环内创建hashmap对象

HashMap<String, String> map = null;
while(cursor.moveToNext())
{
     map = new HashMap<String, String>();
     map.put("i_item_code", cursor.getString(1));
     map.put("i_item_desc", cursor.getString(2));
     map.put("i_item_price", String.valueOf(cursor.getInt(3)));
     map.put("i_item_qty", String.valueOf(cursor.getInt(4)));
     map.put("i_item_tax", String.valueOf(cursor.getFloat(5)));
     map.put("i_item_discount", String.valueOf(cursor.getInt(6)));
     put_list.add(map);
}
  相关解决方案