ORMLite, otra forma de persistencia local

Existen múltiples maneras de persistencia local en Android, la más famosa y quizás mas usada es SQLite, pero aquí vamos a ver una alternativa que bajo mi punto de vista, es mucho más potente y hace el desarrollo un poco más llevadero, ésta se llama ORMLite.

Veremos qué debemos de hacer para implementarlo en nuestro proyecto Android y cómo usarlo para insertar, editar, eliminar y buscar contenido en nuestra base de datos local.

Añadiendo ORMLite a nuestro proyecto

El primer paso que tenemos que hacer es añadir ORMLite a nuestro repositorio, para ello, añadimos las siguientes dos líneas en el gradle del proyecto.

compile 'com.j256.ormlite:ormlite-core:4.48'
compile 'com.j256.ormlite:ormlite-android:4.48'

Modelar clase

Una vez que sincronizamos nuestro proyecto, empezamos a modelar nuestra clase, para ello es necesario añadir:

  1. Añadir @DatabaseTable justo antes de la clase.
  2. Crear una constante por cada campo por cada variable de la clase.
  3. Asociar con @DatabaseField(columName = NAME) por ejemplo, cada una de las variables de nuestra clase con los campos de la tabla.
  4. Creamos el constructor y los getters and setter.

Ejemplo de una clase usuario:

import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable
public class User {
  public static final String ID = "_id";
  public static final String NAME = "name"
  public static final String LASTNAME = "lastname"

  @DatabaseField(generatedId = true, columnName = ID)
  private int id;

  @DatabaseField(columnName = NAME)
  private String name;

  @DatabaseField(columnName = LASTNAME)
  private String lastname;

  public user() {}

  // getters and setters...

}

Creando el helper

El siguiente paso a realizar, es al igual que en SQLite, crear nuestra clase helper, en la que nos encargamos de manejar los datos y crear nuestra base de datos local.

Ésta clase, debe de extender de OrmLiteSqliteOpenHelper, por otro lado, añadiremos el acceso a los DAO (Data Access Object) para poder utilizar el código desde donde queramos.

Por lo que nuestra clase helper, quedaría de la siguiente manera:

public class DBHelper extends OrmLiteSqliteOpenHelper {
  private static final String DATABASE_NAME = "name.db";
  private static final int DATABASE_VERSION = 1;

  private Dao<User, Integer> userDao;

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

  @Override
  public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
    try {
      TableUtils.createTable(connectionSource, User.class);
    } catch (SQLException e) {
      throw new RuntimeException(e);
    }
  }

  @Override
  public void onUpgrade (SQLiteDatabase db, ConnectionSource connectionSource) {
    onCreate(db, connectionSource);
  }

  public Dao<User, Integer> getUserDao() throws SQLException {
    if (userDao == null)
      userDao = getDao(User.class);
    }

    return userDao;
  }

  @Override
  public void close() {
    super.close();
    userDao = null;
  }
}

Ejemplos de uso

El primer paso que debemos de realizar en este apartado, es crear el helper, para ello, recuperamos el helper del OpenHelperManager y le pasamos el contexto y nuestra clase.

DBHelper helper = OpenHelperManager.getHelper(context, DBHelper.class);

Es importante liberar recursos una vez que no vayamos a hacer operaciones con la base de datos, para ello:

if (helper != null) {
  OpenHelperManager.releaseHelper();
  helper = null;
}
Crear un nuevo objeto
Dao dao;
try {
  dao = helper.getUserDao();
  User user = new User("name", "lastname");
  dao.create(user);
} catch (SQLException e) {
  Log.e("Helper", "Create user ERROR");
}
Recuperar objetos

Existen varias maneras de recuperar objetos, por id, consulta o directamente todos los objetos.

Dao dao;
try  {
  dao = helper.getUserDao();
  User user = dao.queryForId(1);
  
  List users = dao.queryForAll();

  List users = dao.queryForEq(User.NAME, "Jaimito");
} catch {
  Log.e("Helper", "Search user error");
}
Actualizar y eliminar objetos
Dao dao;
try {
  dao = helper.getUserDao();
  user.setName("Pedrito");
  dao.update(user);
  dao.delete(user);
} catch (SQLException e) {
  Log.e("Helper", "Update or remove user error");
}

Con esto, ya puedes comenzar a tomar decisiones sobre que persistencia es mejor o más favorable para tu proyecto.

 

Fuente: http://androcode.es/2012/12/primeros-pasos-con-ormlite/

Deja un comentario

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

A %d blogueros les gusta esto: