2013-07-26 58 views
1

我已經搜索解決與其他主題的問題,但我沒有找到好的。所以我會解釋我想要做什麼。 我在網站上恢復JSON文件像這樣的:HashMap <String,String>等到SQLiteDataBase

{ 
    "prod": { 
     "ean": "000000000000", 
     "cat": "category ...", 
     "title": "title ...", 
     "brand": "brand ...", 
     "intake": [ 
      { 
       "carbohydrates": "10g" 
      }, 
      { 
       "protein": "8g" 
      }, 
      { 
       "lipids": "0g" 
      } 
     ], 
     "others": "blablabla" 
    } 
} 

我可以分析得很好,並顯示在像TextViews不同領域,我用一個ListView來顯示「入口」陣列。現在我想將所有這些值放入數據庫中。我可以把一切都放在我的數據庫中,除了這個數組(我使用HashMap)。知道這個陣列的元素數量可能會有所不同, 有人有一個想法如何進行?

謝謝,我爲我的壞英語道歉。 如果你問我,我可以提供更多信息。

有我的數據庫處理程序:

public class Base extends SQLiteOpenHelper { 


private static int DATABASE_VERSION = 1; 

private static final String DATABASE_NAME = "etiquettesDatabase"; 

private static final String TABLE_ETIQUETTE = "etiquettes"; 

private static final String KEY_ID = "id"; 
private static final String KEY_TITLE = "title"; 
private static final String KEY_BRAND = "brand"; 
private static final String KEY_INTAKE = "intake"; // i don't know how to proceed here 
private static final String KEY_FAMILY = "family"; 
private static final String KEY_OTHERS = "others"; 

public Base(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_CONTACTS_TABLE = 
      "CREATE TABLE " + TABLE_ETIQUETTE + "(" 
        + KEY_ID + " INTEGER PRIMARY KEY," 
        + KEY_TITLE + " TEXT," 
        + KEY_BRAND + " TEXT," 
        + KEY_FAMILY + " TEXT," 
        + KEY_INTAKE + " TEXT," 
        + KEY_OTHERS + " TEXT" + ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE); 
} 

@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_ETIQUETTE); 
    onCreate(db); 
} 

void addEtiquette(Etiquette etiquette) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_TITLE, etiquette.get_titre()); 
    values.put(KEY_BRAND, etiquette.get_marque()); 
    values.put(KEY_FAMILY, etiquette.get_famille()); 
    //values.put(KEY_INTAKE, etiquette.get_nutrition()); 
    values.put(KEY_OTHERS, etiquette.get_autres()); 


    db.insert(TABLE_ETIQUETTE, null, values); 
    db.close(); 
} 

Etiquette getEtiquette(int id) { 
    SQLiteDatabase db = this.getReadableDatabase(); 
    Cursor cursor = null; 

    if (db != null) { 
     cursor = db.query(TABLE_ETIQUETTE, new String[]{KEY_ID, 
       KEY_TITLE, KEY_BRAND, KEY_INTAKE, KEY_OTHERS}, KEY_ID + "=?", 
       new String[]{String.valueOf(id)}, null, null, null, null); 
    } 
    Etiquette etiquette; 
    /* 
    if (cursor != null && cursor.moveToFirst()) { 
     cursor.moveToFirst(); Log.v("test", "cursor /null"); 
     etiquette = new Etiquette(Integer.parseInt(cursor.getString(0)), 
       cursor.getString(1), 
       cursor.getString(2), 
       cursor.getString(3), 
       cursor.getClass(), 
       cursor.getString(5) 
       ); 
    } else { 
     etiquette=null; Log.v("test", "etiquette = null"); 
    } 
    */ 
    cursor.close(); 
    //Log.v("test", "cursor"+String.valueOf(Integer.parseInt(cursor.getString(0)))); 
/* 
    Etiquette etiquette = new Etiquette(Integer.parseInt(cursor.getString(0)), 
      cursor.getString(1), 
      cursor.getString(2), 
      cursor.getString(3), 
      cursor.getString(4)); 
*/ 
    // return etiquette; 
    return null; 
} 


public List<Etiquette> getAllEtiquettes() { 
    List<Etiquette> etiquettesList = new ArrayList<Etiquette>(); 

    String selectQuery = "SELECT * FROM " + TABLE_ETIQUETTE; 

    SQLiteDatabase db = this.getWritableDatabase(); 
    Cursor cursor = db.rawQuery(selectQuery, null); 

    if (cursor.moveToFirst()) { 
     do { 
      Etiquette etiquette = new Etiquette(); 
      etiquette.set_id(Integer.parseInt(cursor.getString(0))); 
      etiquette.set_titre(cursor.getString(1)); 
      etiquette.set_famille(cursor.getString(2)); 
      etiquette.set_marque(cursor.getString(3)); 
      //etiquette.set_nutrition(cursor.getString(4)); 
      etiquette.set_autres(cursor.getString(5)); 

      etiquettesList.add(etiquette); 
     } while (cursor.moveToNext()); 
    } 

    return etiquettesList; 
} 


public int updateEtiquette(Etiquette etiquette) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_TITLE, etiquette.get_titre()); 
    values.put(KEY_BRAND, etiquette.get_famille()); 
    values.put(KEY_OTHERS, etiquette.get_autres()); 
// values.put(KEY_INTAKE, etiquette.get_nutrition()); 
    values.put(KEY_OTHERS, etiquette.get_autres()); 

    return db.update(TABLE_ETIQUETTE, values, KEY_ID + " = ?", 
      new String[]{String.valueOf(etiquette.get_id())}); 
} 

public void deleteEtiquette(Etiquette etiquette) { 
    SQLiteDatabase db = this.getWritableDatabase(); 
    db.delete(TABLE_ETIQUETTE, KEY_ID + " = ?", 
      new String[]{String.valueOf(etiquette.get_id())}); 
    db.close(); 
} 

public int getEtiquettesCount() { 
    SQLiteDatabase db = this.getReadableDatabase(); 

    String countQuery = "SELECT * FROM " + TABLE_ETIQUETTE; 
    assert db != null; 
    Cursor cursor = db.rawQuery(countQuery, null); 
    int n = cursor.getCount(); 
    cursor.close(); 

    return n; 
} 

int getDATABASE_VERSION(){ 
    return this.DATABASE_VERSION; 
} 

void setDATABASE_VERSION(int newDATABASE_VERSION){ 
    this.DATABASE_VERSION = newDATABASE_VERSION; 
} 
} 
+0

什麼是你的數據庫表結構? –

+0

等一下,我編輯我的問題,告訴你我的DB處理程序 –

+0

有我的數據庫結構Renjith –

回答

1

您可以通過兩種方式實現它,

第一種方式:
介紹進氣新表使用你的id作爲外鍵和存儲量和其在該表中的值,這將是使用簡單的聯合查詢即可輕鬆訪問。

方式二:
將所有攝入量和值與預先定義的分隔符一個字符串,並將其存儲在當前的領域,當檢索使用用於解析他們和顯示分隔符,只要你喜歡

String value_delimter = ":"; 
String intake_delimter = "&" 
String intak_value = "intake1"+value_delimter +"value1"+intake_delimter 
"intake2"+value_delimter +"value2"+intake_delimter 
"intake3"+value_delimter +"value3"+intake_delimter 

您可以在使用拆分與分隔符檢索數據時訪問值。 希望這可以幫助你,
如果這是有用的,請接受並投票了:)

+1

我會嘗試第二個,因爲Armaan奇怪告訴我: 「碳水化合物:10克|蛋白質:8克|脂質:0克」 –

+0

它運作良好!謝謝 –

1

創建與陣列像這樣的使用環路

「碳水化合物:10克,蛋白質:8G,血脂:0克」 特殊字符分隔的字符串

然後把這整個字符串作爲列值,當你回來嘗試conmma分離,然後冒號分隔以獲得你的價值。

+0

我必須將我所有的HashMap值連接到一個字符串來做到這一點?我不明白你的意思。你能給我一個小例子嗎? –

+0

是的,你需要使用字符串生成器或任何其他使用分隔符的字符連接它。並且在所有串聯之後將該字符串存儲在數據庫表的列中。所以它會被保存。 –

+0

當您從該列中檢索字符串時,再次使用分隔字符拆分該字符串以獲取確切的數據。 –

相關問題