【问题标题】:Passing an array of data into a SQLite Database in android将数据数组传递到android中的SQLite数据库
【发布时间】:2014-02-02 16:33:36
【问题描述】:

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

 private void addContacts(String[] selectedItems) {

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

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

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”表中插入所有数组项?
任何帮助将不胜感激。

【问题讨论】:

    标签: android arrays sqlite


    【解决方案1】:

    你必须修复几行代码,首先是删除 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());
    }
    

    【讨论】:

      【解决方案2】:

      您需要将 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
      

      【讨论】:

        【解决方案3】:

        你也可以考虑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();
        

        这将使插入操作比单次插入更快

        【讨论】:

          【解决方案4】:

          您可以使用代码我只是对您的代码进行了一些更改。

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

          【讨论】:

            猜你喜欢
            • 2014-07-04
            • 2023-03-11
            • 2016-09-07
            • 1970-01-01
            • 1970-01-01
            • 2017-01-23
            • 1970-01-01
            • 1970-01-01
            • 2022-01-16
            相关资源
            最近更新 更多