在Android中将ArrayList<String>的值插入到SQLite中

3

我有两个不同的ArrayList中的名称和ID,希望将ArrayList中的ID和名称存储到字符串中,然后在单击按钮时保存它们到SQLite。

以下代码的问题是当选中2个项目并单击按钮时,这些项目会被插入两次。而当ID设置为UNIQUE时,在插入3个ID时只有一个会保存在SQLite中,...

目前我尝试过以下方法:

 public void addSelected(ArrayList<String> selNames, ArrayList<String> selID) {

    SQLiteDatabase db = getWritableDatabase();
    try{

        for (String str: selID){
            for (String stl:selNames){
            ContentValues cv = new ContentValues();
            cv.put(KEY_ID, str);
            cv.put(KEY_STATUS, stl);
            db.insertOrThrow(TABLE_SELECTED, null, cv);

            }
        }
        db.close();
    }catch (Exception e){
        Log.e("Problem", e + " ");
    }


}
3个回答

2

如果您的两个数组大小相同,我认为您应该尝试这个方法...并且将您的简历通过db.insertorThrow传递,如下所示:

public void addSelected(ArrayList<String> selList, ArrayList<String> selID){

        int size = selID.size();

        SQLiteDatabase db = getWritableDatabase();
       try{
       for (int i = 0; i < size ; i++){
            ContentValues cv = new ContentValues();
           cv.put(KEY_ID, selID.get(i));
             cv.put(KEY_STATUS, selList.get(i));
            Log.d("Added ",""+ cv);
            db.insertOrThrow(TABLE_SELECTED, null, cv);
        }  
db.close();
    }catch (Exception e){
        Log.e("Problem", e + " ");
    }

2
如果您想不迭代地放置数组列表,可以使用以下方法。
/ 此代码可用于插入 /
JSONObject json = new JSONObject();// Create one Jsonobject
json.put("uniqueArrays", new JSONArray(items));// put the ArrayList You have in hand by converting that to JSONArray.
String arrayList = json.toString();//Convert json to string

/这段代码可以用来获取数据/

 JSONObject json = new JSONObject(stringreadfromsqlitetable);// Convert the String to JsonObject
  ArrayList items = json.optJSONArray("uniqueArrays");// Conver the jsonObject to Arraylist

1
你正在迭代ID,然后对于每个ID迭代所有名称,导致你插入了两者的所有组合。相反,你可以迭代两个列表的长度
public void addSelected(ArrayList<String> selNames, ArrayList<String> selID) {

    int size = selNames.size();

    // Check that both lists have the same size
    if (size != selID.size()) {
        throw new IllegalArgumentException();
        // Or some more elegant way to handle this error condition
    }

    SQLiteDatabase db = getWritableDatabase();
    try{
        for (int i = 0; i < size; ++i) {
            ContentValues cv = new ContentValues();
            cv.put(KEY_ID, selID.get(i));
            cv.put(KEY_STATUS, selNames.get(i));
            db.insertOrThrow(TABLE_SELECTED, null, cv);
        }
        db.close();
    } catch (Exception e){
        Log.e("Problem", e + " ");
    }
}

注意:调用db.close()应该放在一个finally块中,而不是try块中。我把它留在了这里,就像在原帖中一样,因为这不是问题的重点,但你在实际代码中也应该处理它。

@murtazaali 能否分享更具体的细节? - Mureinik
我会与你分享Logcat错误信息,请查看。 - murtaza ali
这是在logcat中显示的: 01-11 14:00:04.807 6183-6183/ali.murtaza.jsontest E/SQLiteLog﹕ (1) near "null": syntax error 01-11 14:00:04.807 6183-6183/ali.murtaza.jsontest E/Problem﹕ android.database.sqlite.SQLiteException: near "null": syntax error (code 1): , while compiling: INSERT INTO Selected_table(null) VALUES (NULL) - murtaza ali

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接