Часто в приложениях Android нужно сохранять данные локально. Для этого есть SharedPreferences или SQLite.
Для более менее сложных данных используется SQLite. Но использовать ее напрямую не слишком удобно, приходится писать запросы на SQL, а хотелось бы просто работать с объектами Java. Для этого и существуют библиотеки для объектно-реляционного отображения. Рассмотрим одну из наиболее удобных OrmLite.

Создание класса модели

Подразумевается, что Вы уже скачали библиотеку с сайта и положили ее в папку libs.
Теперь создаем некоторый класс Book, представляющий сохраняемый объект:
import com.j256.ormlite.field.DataType;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;

@DatabaseTable(tableName="book")
public class Book {
public Book(){}

public String getId() {
return id;
}

public void setId(String id) {
this.id = id;
}

public String getTitle() {
return title;
}

public void setTitle(String title) {
this.title = title;
}

@DatabaseField(generatedId=true, id=true)
private String id;

@DatabaseField(dataType=DataType.STRING)
private String title;
}

Видно, что создание модели достаточно просто, требуется всего лишь использовать аннотации DatabaseTable и DatabaseField.

Создание хелпера для доступа к базе данных

Это достаточно стандартный код, взятый из примеров.
import java.sql.SQLException;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.util.Log;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;

/**
* Database helper class used to manage the creation and upgrading of your database. This class also usually provides
* the DAOs used by the other classes.
*/
public class DatabaseHelper extends OrmLiteSqliteOpenHelper {

// name of the database file for your application
private static final String DATABASE_NAME = "db_name.db";
// any time you make changes to your database objects, you may have to increase the database version
private static final int DATABASE_VERSION = 1;

// the DAO object we use to access the Book table
private Dao<Book, String> bookDao = null;

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

/**
* This is called when the database is first created. Usually you should call createTable statements here to create
* the tables that will store your data.
*/
@Override
public void onCreate(SQLiteDatabase db, ConnectionSource connectionSource) {
try {
Log.i(DatabaseHelper.class.getName(), "onCreate");
TableUtils.createTable(connectionSource, Book.class);
} catch (SQLException e) {
Log.e(DatabaseHelper.class.getName(), "Can't create database", e);
throw new RuntimeException(e);
}
}

/**
* This is called when your application is upgraded and it has a higher version number. This allows you to adjust
* the various data to match the new version number.
*/
@Override
public void onUpgrade(SQLiteDatabase db, ConnectionSource connectionSource, int oldVersion, int newVersion) {
try {
Log.i(DatabaseHelper.class.getName(), "onUpgrade");
TableUtils.dropTable(connectionSource, Book.class, true);
// after we drop the old databases, we create the new ones
onCreate(db, connectionSource);
} catch (SQLException e) {
Log.e(DatabaseHelper.class.getName(), "Can't drop databases", e);
throw new RuntimeException(e);
}
}

/**
* Returns the Database Access Object (DAO) for our Book class. It will create it or just give the cached
* value.
*/
public Dao<Book, String> getViolationDao() throws SQLException {
if (bookDao == null) {
bookDao = getDao(Book.class);
}
return bookDao;
}

/**
* Close the database connections and clear any cached DAOs.
*/
@Override
public void close() {
super.close();
bookDao = null;
}
}

Здесь мы наследуем OrmLiteSqliteOpenHelper и определяем, что будет происходить при создании базы(метод onCreate)
и при ее обновлении(метод onUpdate).
Кроме этого мы определяем метод для получения объекта доступа к данным нашего класса BookDao.
Этот объект будет использоваться для запросов к базе данных: сохранение объекта, получения, удаления.

Создание менеджера-синглтона для доступа к хелперу базы данных

Мы сделаем менеджера, через которого можно будет получить хелпер к базе данных(а это что-то типа соединения к ней). Этот менеджер будет создавать хелпер к базе данных при старте приложения и удалять хелпер при его завершении.
import com.j256.ormlite.android.apptools.OpenHelperManager;
import android.content.Context;

class DatabaseManager {
private static volatile DatabaseManager instance;
private DatabaseHelper helper;

private DatabaseManager() {
}

public static DatabaseManager getInstance() {
if (instance == null) {
synchronized (DatabaseManager.class) {
if (instance == null) {
instance = new DatabaseManager();
}
}
}
return instance;
}

public void init(Context context){
if(helper == null)
helper = OpenHelperManager.getHelper(context, DatabaseHelper.class);
}

public void release(){
if(helper != null)
OpenHelperManager.releaseHelper();
}

public DatabaseHelper getHelper() {
return helper;
}
}

Класс-наследник Application

Для инициализации менеджера базы данных и хелпера только один раз мы переопределим метод onCreate класса Application. Этот метод вызывается один раз при старте приложения.

Для очистки ресурсов мы переопределим метод onTerminate.

import android.app.Application;

public class MyApplication extends Application {
@Override
public void onCreate() {
super.onCreate();
DatabaseManager.getInstance().init(getApplicationContext());
}

@Override
public void onTerminate() {
super.onTerminate();
DatabaseManager.getInstance().release();
}

}

После этого не забываем указать Android, что нужно использовать наш класс MyApplication, а не тот, который по умолчанию.
Сделать это нужно в AndroidManifest.xml в атрибуте android:name тега application.
<application
android:name=".MyApplication"
android:icon="@drawable/ic_launcher"
android:label="@string/app_name">
</application>

Использование OrmLite в приложении

Dao<Book, String> bookDao;
try {
bookDao = DatabaseManager.getInstance().getHelper().getBookDao();
Book book = new book();
book.setId(id);
book.setTitle(some_title);
bookDao.create(book); //создаем книгу
Book b = bookDao.queryForId(id); //получаем книгу по id
bookDao.delete(b); //удаляем книгу
} catch (SQLException e) {
e.printStackTrace();
}