sqlite数据库字段如何存储arraylist

时间:2014-05-16 12:15:51

标签: android

CREATE TABLE 
hindibible(ID INTEGER PRIMARY KEY AUTOINCREMENT ,
            Book INTEGER ,
            Chapter INTEGER ,
            Version INTEGER ,
            TB TEXT ,
            NKJ TEXT );

我正在创建sqlite表并插入所有值。在上面的sqlite表中如何将NKJ字段数据存储到arraylist中。

1 个答案:

答案 0 :(得分:1)

我使用这些方法。有几点需要注意:

  1. sqlite表是特别的 - 确保您插入的数据符合您要发送给它的表的列。
  2. insertArrayList遍历每一行,但在完成所有操作之前不会提交事务。这是为了表现。
  3. rowValues将行数据转换为带逗号分隔符的字符串,这是sql使用的
  4. rowValues还用两个单引号替换单引号,sqlite将其用作转义字符。您可能必须使用其他人,具体取决于您对数据内容的期望
  5. 代码:

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