2012-06-05 2 views
0

При первой установке мое приложение должно кэшировать данные, полученные из сети, и вставлять строки в базу данных SQLite. В итоге у меня около 700 вставок, которые занимают не менее 15 секунд. В настоящее время моя логика выглядит следующим образом (псевдо):Самый эффективный способ вставить данные SQLite

ScrollThroughAllObjects(){ 
    if(objectDoesNotExist){ 
     cacheObject(); 
    } 
} 

cacheObject(Object ob){ 
    ContentValues values = new ContentValues(); 
    values.put(KEY_ID, ob.getId); 
    // add lots more values 
    return mDb.insert(DATABASE_TABLE, null, values); 
} 

Есть более эффективный, быстрый, способ для меня, чтобы справиться с этой вставкой?

+0

Возможный дубликат [Android SQLite database: медленная вставка] (http: // stackoverflow.com/questions/3501516/android-sqlite-database-slow-insertion) – WarrenFaith

ответ

5

Выполнение записи с использованием SQLite Transaction. Это удивительно ускорит весь процесс; потому что когда вы выполняете одиночную вставку (по одному за раз), SQLite рассматривает каждую вставку как транзакцию и ей необходимо создать Journal-файл для каждого исполнения (что требует времени). Однако при связывании всех ваших запросов на добавление/редактирование/удаление на одну транзакцию создается только один файл журнала в конце транзакции, что приводит к быстрому выполнению запросов SQLite.

+0

Отлично, что доведено до 3 секунд, спасибо. – androidneil

+0

Оптимизация действительно предлагает отличные эффекты :) – waqaslam

0

Оберните всю операцию в транзакции. Только это даст вам огромное увеличение скорости, а также даст вам преимущества транзакционного поведения.

0

Вы должны использовать метод bulkInsert. Код можно получить от SQLiteContentProvider. Измените его для своих нужд.

0

Создание и подключение к базе данных

Первый импорт android.databse.sqlite.SQLiteDatabase в приложение. Затем используйте метод openOrCreateDatabase() для создания или подключения к базе данных. Sqlite documentation.

onCreate() - Здесь мы должны написать инструкции create table. Это вызывается при создании базы данных. onUpgrade() - этот метод вызывается при обновлении базы данных, как изменение структуры таблицы, добавление ограничений в базу данных и т.д.,

общественного класса DatabaseHandler расширяет SQLiteOpenHelper {

// All Static variables 
// Database Version 
private static final int DATABASE_VERSION = 1; 

// Database Name 
private static final String DATABASE_NAME = "contactsManager"; 

// Contacts table name 
private static final String TABLE_CONTACTS = "contacts"; 

// Contacts Table Columns names 
private static final String KEY_ID = "id"; 
private static final String KEY_NAME = "name"; 
private static final String KEY_PH_NO = "phone_number"; 

public DatabaseHandler(Context context) { 
    super(context, DATABASE_NAME, null, DATABASE_VERSION); 
} 

// Creating Tables 
@Override 
public void onCreate(SQLiteDatabase db) { 
    String CREATE_CONTACTS_TABLE = "CREATE TABLE " + TABLE_CONTACTS + "(" 
      + KEY_ID + " INTEGER PRIMARY KEY," + KEY_NAME + " TEXT," 
      + KEY_PH_NO + " TEXT" + ")"; 
    db.execSQL(CREATE_CONTACTS_TABLE); 
} 

// Upgrading database 
@Override 
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { 
    // Drop older table if existed 
    db.execSQL("DROP TABLE IF EXISTS " + TABLE_CONTACTS); 

    // Create tables again 
    onCreate(db); 
} 

Вставка записей

Android поставляется с рядом классов, которые упрощают использование базы данных. Используйте экземпляр ContentValues, чтобы создать серию полей таблицы для сопоставлений данных, которые будут переданы в метод insert(). Android создал аналогичные методы для обновления и удаления записей.

Метод addContact() принимает объект контакта как параметр. Нам нужно создать параметры ContentValues, используя объект Contact. Как только мы вставили данные в базу данных, нам нужно закрыть соединение с базой данных.

// Adding new contact 
public void addContact(Contact contact) { 
    SQLiteDatabase db = this.getWritableDatabase(); 

    ContentValues values = new ContentValues(); 
    values.put(KEY_NAME, contact.getName()); // Contact Name 
    values.put(KEY_PH_NO, contact.getPhoneNumber()); // Contact Phone Number 

    // Inserting Row 
    db.insert(TABLE_CONTACTS, null, values); 
    db.close(); // Closing database connection 
} 

Полный текст статьи link.

Наблюдать за этим video, который является простым определением, как создать таблицу и вставить данные в android.

Наконец-то не пропустите это, Android SQLite: вставьте, обновите, удалите и покажите данные (Link).

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