2014-05-16 148 views
1
CREATE TABLE 
hindibible(ID INTEGER PRIMARY KEY AUTOINCREMENT , 
      Book INTEGER , 
      Chapter INTEGER , 
      Version INTEGER , 
      TB TEXT , 
      NKJ TEXT); 

我創建sqlite表並插入所有值。在上面的sqlite表中如何將NKJ字段的數據存儲到arraylist中。sqllite數據庫字段如何存儲數組列表

+1

我想你應該正常化您的數據庫,使一個一對多的關係。 – gerbit

回答

1

我使用這些方法。有幾件重要的事情要注意:

  1. sqlite表是特別的 - 確保你插入的數據適合你發送它的表的列。
  2. insertArrayList遍歷每一行,但在全部完成之前不會提交事務。這是爲了表現。
  3. rowValues將行數據轉換爲逗號分隔符的字符串,這就是sql所使用的內容
  4. rowValues還將單引號替換爲兩個單引號,sqlite將其用作轉義字符。您可能需要使用他人取決於你希望你的數據的內容是

代碼:

private String rowValues(ArrayList<String> rowdata) { 
    StringBuilder valString = new StringBuilder(); 
    String separator = ""; 
    valString.append("("); 
    for (String cell : rowdata) { 
     valString.append(separator + "'" + cell.replace("'", "''") + "'"); 
     separator = ","; 
    } 
    valString.append(")"); 
    return valString.toString(); 
} 

public void insertArrayList(SQLiteDatabase db, String Table, ArrayList<ArrayList<String>> tabledata) { 
    Cursor cols = db.rawQuery("select * from " + Table + " limit 0",null); 
    db.beginTransaction(); 
    try { 
     db.execSQL("delete from " + Table); 
     int Xtra = cols.getColumnCount() - tabledata.get(0).size(); 
     for (ArrayList<String> item : tabledata) { 
      for (int a=0;a<Xtra;a++) {item.add("");} 
      db.execSQL("insert into " + Table + " values " + rowValues(item) + ";"); 
      //Log.i("insertArrayList","insert into " + Table + " values " + rowValues(item) + ";"); 
     } 
     db.setTransactionSuccessful(); 
    } catch (Exception e) { 
     Log.e("DBWrapper", "insertArrayList error: " + e.getMessage()); 
    } finally { 
     db.endTransaction(); 
    } 
} 
相關問題