Несколько запросов вставки или замены в Android SQLite

-4

Я использую ниже запрос для вставки или замены "числа" и "времени" в таблице "Контакты". Есть ли способ вставить или заменить несколько записей в SQLite для Android?

"Insert or replace into Contacts (_id, number, status) values ((select _id from Contacts where number = '123456'), '123456','sent');"
  • 0
    stackoverflow.com/questions/1609637/...
  • 0
    @Andrew Андрей Филден, это для Sqlite, а не MySql
Показать ещё 1 комментарий
Теги:

3 ответа

1
Лучший ответ

Вы можете улучшить скорость для многократной/пакетной базы данных. Вставить или заменить операцию, используя концепцию транзакции и compileStatement, чтобы ваш запрос был скомпилирован только один раз.

Пример:

    db.beginTransaction();
    try {
         String sql = "Insert or Replace into Items (itemNumber, description,unitOfMeasure, weight) values(?,?,?,?)";
         ArrayList<ItemMaster> itemsList = // Retrieve your items list here
         for(int i=0;i<itemsList.size();i++)
         {

             SQLiteStatement insert = db.compileStatement(sql);
             insert.bindString(1, item.getItemNumber());
             insert.bindString(2, item.getItemDescription1());
             insert.bindString(3, item.getSellingUOM());
             insert.bindDouble(4, item.getWeight());
             insert.execute();
         }
         db.setTransactionSuccessful();
    } finally {
      db.endTransaction();
    }
  • 0
    Спасибо за ваш код Patel, но это очень медленный процесс, если вы имеете дело, например, со 100 записями. Я ищу любой быстрый подход.
  • 0
    Нет, я уверен, что это не медленно. Я сделал демо, чтобы вставить 100 записей, используя традиционный метод массовой вставки v / s. традиционная вставка занимает 1672 мс, а массовая вставка - всего 92 мс. посмотрите на этот techrepublic.com/blog/software-engineer/…
Показать ещё 1 комментарий
1

Попробуйте этот код для вставки нескольких записей

public void insertIntoTable(ArrayList<YourModelClass> alist) {

        SQLiteDatabase db = this.getWritableDatabase();

        String sql = "insert into tableName (colomname1,colomnname2) values(?,?)";
        db.beginTransaction();
        SQLiteStatement stmt = db.compileStatement(sql);
        for (int i = 0; i < alist.size(); i++) {
            stmt.bindString(1, alist.get(i).getMethod1());
            stmt.bindString(2, alist.get(i).getMethod2());
            stmt.execute();
            stmt.clearBindings();
        }
        db.setTransactionSuccessful();
        db.endTransaction();

        db.close();
    }

Также создайте класс модели, чтобы указать имена переменных. например:

class ModelClass {

String var1,var2;

public void setVar1(String var1)
{
this.var1=var1;
}

public String getVar1()
{
return var1;
}
public void setVar2(String var2)
{
this.var2=var2;
}

public String getVar2()
{
return var2;
}
}
0

Не уверен, что я понимаю запрос, но похоже, что вы можете просто обновить вместо вставки или замены (выбор вернет null, если номер не найден)

Update Contacts set status = 'sent' where number in (...)
  • 0
    Если записи не существует, произойдет сбой.
  • 0
    Какой _id вы хотите, если это новая запись? null выглядит очень плохо
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню