将一组数据传递到android中的SQLite数据库

时间:2014-02-02 16:33:37

标签: android arrays sqlite

我正在使用数组将数据发送到我的SQLite数据库 该数组包含所有选定的值。

 private void addContacts(String[] selectedItems) {

    manager.Insert_phone_contact(selectedItems);
    Intent i = new Intent(this, MainActivity.class);    
    startActivity(i);
}

我的SQLite数据库代码在contentvalues中插入上面提到的“selectedItems”数组如下:

public void Insert_phone_contact(String [] contact){
    try{

        SQLiteDatabase DB = this.getWritableDatabase();
        for(int i=0;i<contact.length;i++){
            ContentValues cv = new ContentValues();
            cv.put(CONTACT_NAME, contact[i]);
            DB.insert(TABLE_CONTACTS, null, cv);
            DB.close();
        }
        }
    catch(Exception ex){
        Log.e("Error in phone contact insertion", ex.toString());
    }

只有第一个数组项存储在ContentValues cv中,而不是所有数组元素中 这段代码有什么问题?
如何在“TABLE_CONTACTS”表中插入所有数组项? 任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:6)

你必须修复几行代码,首先是删除Db.Close()并在循环后添加它 您尝试的代码是在第一次插入后关闭Db对象,而其余的循环迭代则不可用。

public void Insert_phone_contact(String [] contact){
try{

    SQLiteDatabase DB = this.getWritableDatabase();
    ContentValues cv = new ContentValues(); //Declare once
    for(int i=0;i<contact.length;i++){            
        cv.put(CONTACT_NAME, contact[i]);
        DB.insert(TABLE_CONTACTS, null, cv); //Insert each time for loop count            
    }
    DB.close(); // Now close the DB Object
    }
catch(Exception ex){
    Log.e("Error in phone contact insertion", ex.toString());
}

答案 1 :(得分:3)

您需要将insert和close语句移到for循环外部,因为当前只存储一个值而不是再次打开db:

   ContentValues cv = new ContentValues();
    for(int i=0;i<contact.length;i++){
       // put all values in  ContentValues
        cv.put(CONTACT_NAME, contact[i]);
    }
    DB.insert(TABLE_CONTACTS, null, cv); // insert in db
    DB.close();  // call close

答案 2 :(得分:1)

您还可以考虑使用sqlite进行交易

    DB.beginTransaction();
    for(int i=0;i<contact.length;i++){    
        ContentValues cv = new ContentValues();  
        cv.put(CONTACT_NAME, contact[i]);
        DB.insert(TABLE_CONTACTS, "0.0", cv);
    }
    DB.setTransactionSuccessful();

    DB.endTransaction();

这将使插入操作比单个插入

更快

答案 3 :(得分:0)

您可以使用代码我只需更改您的代码。

public void Insert_phone_contact(String [] contact){
try{

    SQLiteDatabase DB = this.getWritableDatabase();
    for(int i=0;i<contact.length;i++){
        ContentValues cv = new ContentValues();
        cv.put(CONTACT_NAME, contact[i]);
        DB.insert(TABLE_CONTACTS, null, cv);

    }

        cv.close();
        DB.close();
    }
catch(Exception ex){
    Log.e("Error in phone contact insertion", ex.toString());
}