2013-03-26 57 views
2

我需要一個SQLite查詢插入或更新SQLite表中。在SQLite中插入或替換多行條件查詢

MyTable的:

  1. 標識(主鍵和not null)
  2. 名稱
  3. ******中國

enter image description here

預期查詢:如果ID不存在,那麼必須插入新行 和如果現有的行值被改變則插入多個行當更新行。

編輯1:

我已經發布INSERT查詢我Insert Multiple Rows in SQLite Error (error code = 1)都試過了。像那樣,我曾嘗試使用「INSERT或REPLACE」。但它是working with Firfox SQLite Manager Not working with Android SQLite

我已經使用sDataBase.execSQL(query)來執行此查詢。

+0

只是一個可能幫助別人的筆記。它**完全可以通過「插入或替換」來獲得批量命令(so .. values(...),(...),(...)等等)。 – Fattie 2017-02-28 15:18:18

+0

只是另一個可能幫助別人的注意事項:)有趣的是,性能測試表明,「插入或替換」比普通的「插入」慢得多(5%最差)。 – Fattie 2017-02-28 15:23:02

回答

0

我只在Firefox SQLite Manager中創建了主鍵的數據庫。我在Android的SQLite數據庫中錯過了這個。現在我有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 2013-03-26 16:12:27

+0

@Ponmalar Emm,我希望你有一些自定義類對象,您想要在本地sqlite數據庫中寫入/更新。所以批量插入/更新可以正常工作。在ArrayList中傳遞多個對象 – Roman 2013-03-26 16:14:51

+0

感謝您的回覆。我從webview發送查詢。在WebView內部,我將使用sDataBase.execSQL(查詢)執行查詢;所以我只需要一個查詢 – Ponmalar 2013-03-26 16:17:34