2013-11-16 5 views
6

У меня есть 800 insert заявлений, загруженных из сети в следующем формате:несколько операторов вставки андроид SQLite

insert into mytable(col1,..,coln) values(val1,..valn);insert into mytable col...

Я слышал сделок, ContentValue с, и с помощью union, но я не могу понять, какие для этого случая лучше.

Каков наилучший способ вставить их в базу данных sqlite после усечения mytable?

+0

Прежде всего. Это не является хорошим способом обновления таблицы из данных, загружаемых с сервера. Почему вы загружаете инструкции вставки? – Simon

+0

@Simon Это локальный сервер и не подключен к Интернету. Я пытаюсь вставить значения таблицы mysql (используемые в качестве таблицы резервного копирования) в таблицу sqlite (инструкции вставки создаются с использованием скрипта php) – danrah

ответ

17

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

SQLiteDatabase db = sqlHelper.getWritableDatabase(); // get a writable database here 
    db.beginTransaction(); 

    try { 
     for (int insertQuery : listOfQueries) { // loop through your records 
      db.insert(...); 
     } 

     db.setTransactionSuccessful(); 
    } 
    finally { 
     db.endTransaction(); 
    } 

    db.close(); 
+1

Может ли он обрабатывать 800 вставных операторов? – danrah

+1

Да, я делаю около 7000 в своем приложении и хорошо работает. Вы должны сделать это в отдельном потоке, лучше всего использовать «AsyncTask», хотя чтобы избежать блокировки потока пользовательского интерфейса. – Szymon

+3

Вам не нужно каждый раз называть 'insert'. Вы можете передать несколько значений в одно предложение insert. Посмотрите здесь: http://stackoverflow.com/questions/1609637/is-it-possible-to-insert-multiple-rows-at-a-time-in-an-sqlite-database/1609688#1609688 –

0

Я использую следующий код, запускаю только один запрос.

public void addListRecord(List<Province> list) { 
    SQLiteDatabase db = DatabaseManager.getInstance().openDatabase(); 
    try { 
     String sql = " INSERT INTO " + TABLE_PROVINCE + " (" 
       + COL_PROVINCE_ID + "," 
       + COL_PROVINCE_NAME + "," 
       + COL_PROVINCE_STATUS + ") VALUES "; 
     String value = ""; 
     for (Province item : list) { 
      value += "('" + item.getId() + "'," 
        + "'" + item.getName() + "'," 
        + "'" + item.getStatus() + "')"; 
      value += ","; 
     } 
     value = Utils.removeLastChar(value); 
     value += ";"; 
     String mQuery = sql + value; 
     Logger.debug("mQuery: " + mQuery); 
     SQLiteStatement statement = db.compileStatement(mQuery); 
     statement.execute(); 
    } catch (SQLException e) { 
     Logger.debug("SQLException Error: " + e); 
    } finally { 
     DatabaseManager.getInstance().closeDatabase(); 
    } 
} 
public static String removeLastChar(String s) { 
    if (s == null || s.length() == 0) { 
     return s; 
    } 
    return s.substring(0, s.length() - 1); 
} 
Смежные вопросы