我正在使用数组将数据发送到我的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”表中插入所有数组项?
任何帮助将不胜感激。
答案 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());
}