2013-03-26 3 views
2

Мне нужен один SQLite-запрос для вставки или обновления в таблице SQLite.Вставить или заменить несколько строк с условием в SQLite Query

MyTable:

  1. Id (первичный ключ и не нулевой)
  2. Имя
  3. PhoneNumber

enter image description here

Ожидаемое Запрос: Если Id нет, то нужно вставить новую строку и если текущее значение строки изменяется затем обновить строку, вставляя несколько строк.

EDIT 1:

Я отправил запрос INSERT я пытался в Insert Multiple Rows in SQLite Error (error code = 1). Как и я, я попытался использовать «INSERT OR REPLACE». Но это working with Firfox SQLite Manager Not working with Android SQLite.

Я использовал sDataBase.execSQL(query) для выполнения этого запроса.

+0

Просто примечание, которое может помочь кому-то. ** ** отлично, чтобы иметь командную команду (так ... значения (...), (...), (...) и т. Д.) С «вставкой или заменой». – Fattie

+0

Еще одно замечание, которое может кому-то помочь :) Интересно, что тесты производительности показывают, что «вставить или заменить» очень мало медленнее (в худшем случае - 5%), чем простая «вставка». – Fattie

ответ

0

Я создал базу данных с первичным ключом только в Firefox SQLite Manager. Я пропустил это в базе данных SQLite на Android. Теперь у меня есть created database with PRIMARY KEY and NOT NULL. Теперь работает отлично.

2

Попробуйте это:

String sql = "INSERT OR REPLACE INTO MyTable (Name, PhoneNumber) VALUES (?,?)"; 
SQLiteStatement st = db.compileStatement(sql); 

И писать или обновление:

public void writeOrUpdateData(ArrayList<MyClass> data) { 
    try { 

     db.beginTransaction(); 

     for(int i = 0; i < data.size(); i++) { 

      st.clearBindings(); 
      st.bindLong(1, data.get(i).getName()); 
      st.bindString(2, data.get(i).getPhoneNumber); 
      st.executeInsert(); 

     } 

     db.setTransactionSuccessful(); 

    } 
    catch(Exception e) {} 
    finally { 
     db.endTransaction(); 
    } 
} 

Таким образом, вы получаете объемную вставки/обновления, что весьма эффективно!

+0

Несколько строк не будут работать с вашим запросом. Я пытался. http://stackoverflow.com/questions/1609637/is-it-possible-to-insert-multiple-rows-at-a-time-in-an-sqlite-database – Ponmalar

+0

@Ponmalar Emm, я ожидаю, что у вас есть пользовательские объекты класса, которые вы хотите написать/обновить в локальном SQL-блоке db. Таким образом, объемная вставка/обновление будет работать нормально. Передайте несколько объектов в ArrayList – Roman

+0

Спасибо за ваш ответ. Я отправляю запрос из webview. Внутри WebView я буду выполнять запрос, используя sDataBase.execSQL (query); Поэтому мне нужен только запрос – Ponmalar

Смежные вопросы