Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
Android Databases (Español)
Search
Sponsored
·
SiteGround - Reliable hosting with speed, security, and support you can count on.
→
Sloy
May 26, 2014
Technology
1
61
Android Databases (Español)
Android Databases, alternativas de uso
Sloy
May 26, 2014
Tweet
Share
Other Decks in Technology
See All in Technology
Meshy Proプラン課金した
henjin0
0
240
OCI Database Management サービス詳細
oracle4engineer
PRO
1
7.3k
SREが向き合う大規模リアーキテクチャ 〜信頼性とアジリティの両立〜
zepprix
0
390
Introduction to Sansan for Engineers / エンジニア向け会社紹介
sansan33
PRO
6
67k
サイボウズ 開発本部採用ピッチ / Cybozu Engineer Recruit
cybozuinsideout
PRO
10
73k
ブロックテーマでサイトをリニューアルした話 / 2026-01-31 Kansai WordPress Meetup
torounit
0
440
Mosaic AI Gatewayでコーディングエージェントを配るための運用Tips / JEDAI 2026 新春 Meetup! AIコーディング特集
genda
0
150
日本語テキストと音楽の対照学習の技術とその応用
lycorptech_jp
PRO
1
420
日本の85%が使う公共SaaSは、どう育ったのか
taketakekaho
1
130
GCASアップデート(202510-202601)
techniczna
0
250
Data Hubグループ 紹介資料
sansan33
PRO
0
2.7k
Amazon Bedrock AgentCore 認証・認可入門
hironobuiga
2
500
Featured
See All Featured
世界の人気アプリ100個を分析して見えたペイウォール設計の心得
akihiro_kokubo
PRO
66
36k
End of SEO as We Know It (SMX Advanced Version)
ipullrank
3
3.9k
技術選定の審美眼(2025年版) / Understanding the Spiral of Technologies 2025 edition
twada
PRO
117
110k
Highjacked: Video Game Concept Design
rkendrick25
PRO
1
280
Practical Tips for Bootstrapping Information Extraction Pipelines
honnibal
25
1.7k
Paper Plane
katiecoart
PRO
0
46k
Accessibility Awareness
sabderemane
0
48
[SF Ruby Conf 2025] Rails X
palkan
0
740
Easily Structure & Communicate Ideas using Wireframe
afnizarnur
194
17k
The Illustrated Children's Guide to Kubernetes
chrisshort
51
51k
Data-driven link building: lessons from a $708K investment (BrightonSEO talk)
szymonslowik
1
910
The Art of Delivering Value - GDevCon NA Keynote
reverentgeek
16
1.8k
Transcript
Android Databases +Rafael Vázquez
Android Databases Comparación | Alternativas
SQLite
SQLite Sencillo Ligero Embebido
None
API Nativa
API Nativa SQLiteOpenHelper SQLiteDatabase Cursor
Extender SQLiteOpenHelper public static final String DATABASE_NAME = "contacts.db"; public
static final int DATABASE_VERSION = 1; public static final String TABLE_CONTACTS = "contact"; public static final String FIELD_ID = "_id"; public static final String FIELD_NAME = "name"; public static final String FIELD_NUMBER = "number"; public SampleSQLiteHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_CONTACTS + "( " + FIELD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + FIELD_NAME + " TEXT, " + FIELD_NUMBER + " NUMBER);"); } 1
Extender SQLiteOpenHelper public static final String DATABASE_NAME = "contacts.db"; public
static final int DATABASE_VERSION = 1; public static final String TABLE_CONTACTS = "contact"; public static final String FIELD_ID = "_id"; public static final String FIELD_NAME = "name"; public static final String FIELD_NUMBER = "number"; public SampleSQLiteHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_CONTACTS + "( " + FIELD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + FIELD_NAME + " TEXT, " + FIELD_NUMBER + " NUMBER);"); } 1
Extender SQLiteOpenHelper public static final String DATABASE_NAME = "contacts.db"; public
static final int DATABASE_VERSION = 1; public static final String TABLE_CONTACTS = "contact"; public static final String FIELD_ID = "_id"; public static final String FIELD_NAME = "name"; public static final String FIELD_NUMBER = "number"; public SampleSQLiteHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_CONTACTS + "( " + FIELD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + FIELD_NAME + " TEXT, " + FIELD_NUMBER + " NUMBER);"); } 1
Extender SQLiteOpenHelper public static final String DATABASE_NAME = "contacts.db"; public
static final int DATABASE_VERSION = 1; public static final String TABLE_CONTACTS = "contact"; public static final String FIELD_ID = "_id"; public static final String FIELD_NAME = "name"; public static final String FIELD_NUMBER = "number"; public SampleSQLiteHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_CONTACTS + "( " + FIELD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + FIELD_NAME + " TEXT, " + FIELD_NUMBER + " NUMBER);"); } 1
Extender SQLiteOpenHelper public static final String DATABASE_NAME = "contacts.db"; public
static final int DATABASE_VERSION = 1; public static final String TABLE_CONTACTS = "contact"; public static final String FIELD_ID = "_id"; public static final String FIELD_NAME = "name"; public static final String FIELD_NUMBER = "number"; public SampleSQLiteHelper(Context context) { super(context, DATABASE_NAME, null, DATABASE_VERSION); } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE " + TABLE_CONTACTS + "( " + FIELD_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " + FIELD_NAME + " TEXT, " + FIELD_NUMBER + " NUMBER);"); } 1
Usar SQLiteDatabase (leer) mDbHelper = new SampleSQLiteHelper(this); ! SQLiteDatabase db
= mDbHelper.getReadableDatabase(); String[] projection = {FIELD_ID, FIELD_NAME, FIELD_NUMBER}; String sortOrder = FIELD_NAME; Cursor cursor = db.query(TABLE_CONTACTS, projection, null, null, null, null, sortOrder); SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, android.R.layout.simple_list_item_2, cursor, new String[]{FIELD_NAME, FIELD_NUMBER}, new int[]{android.R.id.text1, android.R.id.text2} ); setListAdapter(adapter); db.close(); 2
Usar SQLiteDatabase (leer) mDbHelper = new SampleSQLiteHelper(this); ! SQLiteDatabase db
= mDbHelper.getReadableDatabase(); String[] projection = {FIELD_ID, FIELD_NAME, FIELD_NUMBER}; String sortOrder = FIELD_NAME; Cursor cursor = db.query(TABLE_CONTACTS, projection, null, null, null, null, sortOrder); SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, android.R.layout.simple_list_item_2, cursor, new String[]{FIELD_NAME, FIELD_NUMBER}, new int[]{android.R.id.text1, android.R.id.text2} ); setListAdapter(adapter); db.close(); 2
Usar SQLiteDatabase (leer) mDbHelper = new SampleSQLiteHelper(this); ! SQLiteDatabase db
= mDbHelper.getReadableDatabase(); String[] projection = {FIELD_ID, FIELD_NAME, FIELD_NUMBER}; String sortOrder = FIELD_NAME; Cursor cursor = db.query(TABLE_CONTACTS, projection, null, null, null, null, sortOrder); SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, android.R.layout.simple_list_item_2, cursor, new String[]{FIELD_NAME, FIELD_NUMBER}, new int[]{android.R.id.text1, android.R.id.text2} ); setListAdapter(adapter); db.close(); 2
Usar SQLiteDatabase (leer) mDbHelper = new SampleSQLiteHelper(this); ! SQLiteDatabase db
= mDbHelper.getReadableDatabase(); String[] projection = {FIELD_ID, FIELD_NAME, FIELD_NUMBER}; String sortOrder = FIELD_NAME; Cursor cursor = db.query(TABLE_CONTACTS, projection, null, null, null, null, sortOrder); SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, android.R.layout.simple_list_item_2, cursor, new String[]{FIELD_NAME, FIELD_NUMBER}, new int[]{android.R.id.text1, android.R.id.text2} ); setListAdapter(adapter); db.close(); 2
Usar SQLiteDatabase (leer) mDbHelper = new SampleSQLiteHelper(this); ! SQLiteDatabase db
= mDbHelper.getReadableDatabase(); String[] projection = {FIELD_ID, FIELD_NAME, FIELD_NUMBER}; String sortOrder = FIELD_NAME; Cursor cursor = db.query(TABLE_CONTACTS, projection, null, null, null, null, sortOrder); SimpleCursorAdapter adapter = new SimpleCursorAdapter( this, android.R.layout.simple_list_item_2, cursor, new String[]{FIELD_NAME, FIELD_NUMBER}, new int[]{android.R.id.text1, android.R.id.text2} ); setListAdapter(adapter); db.close(); 2
Usar SQLiteDatabase (escribir) SQLiteDatabase db = mDbHelper.getWritableDatabase(); ContentValues values
= new ContentValues(2); values.put(FIELD_NAME, contactName); values.put(FIELD_NUMBER, contactNumber); db.insert(TABLE_CONTACTS, null, values); db.close(); 3
Usar SQLiteDatabase (escribir) SQLiteDatabase db = mDbHelper.getWritableDatabase(); ContentValues values
= new ContentValues(2); values.put(FIELD_NAME, contactName); values.put(FIELD_NUMBER, contactNumber); db.insert(TABLE_CONTACTS, null, values); db.close(); 3
Usar SQLiteDatabase (escribir) SQLiteDatabase db = mDbHelper.getWritableDatabase(); ContentValues values
= new ContentValues(2); values.put(FIELD_NAME, contactName); values.put(FIELD_NUMBER, contactNumber); db.insert(TABLE_CONTACTS, null, values); db.close(); 3
Usar SQLiteDatabase (escribir) SQLiteDatabase db = mDbHelper.getWritableDatabase(); ContentValues values
= new ContentValues(2); values.put(FIELD_NAME, contactName); values.put(FIELD_NUMBER, contactNumber); db.insert(TABLE_CONTACTS, null, values); db.close(); 3
API Nativa
API Nativa Simple (no sencilla) Documentación Control y rendimiento Más
código, más sucio Tendencia a errores Difícil de mantener
None
ORM Lite
ORM Lite Modelo Java OrmLiteSqliteOpenHelper DAO
Definir modelo (Contacto) @DatabaseTable public class Contact { @DatabaseField(generatedId
= true) private int id; @DatabaseField private String name; @DatabaseField(foreign = true, foreignAutoRefresh = true, foreignAutoCreate = true) private PhoneNumber phoneNumber; } 1
Definir modelo (Teléfono) @DatabaseTable public class PhoneNumber { @DatabaseField(generatedId
= true) private int id; @DatabaseField private int number; } 1
Extender OrmLiteSqliteOpenHelper private static final int DB_VERSION = 1; private
static final String DB_NAME = "contacts.db"; public DbHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db, ConnectionSource cs) { try { TableUtils.createTable(cs, Contact.class); TableUtils.createTable(cs, PhoneNumber.class); } catch (SQLException e) { throw new RuntimeException(e); } } 2
Extender OrmLiteSqliteOpenHelper private static final int DB_VERSION = 1; private
static final String DB_NAME = "contacts.db"; public DbHelper(Context context) { super(context, DB_NAME, null, DB_VERSION); } @Override public void onCreate(SQLiteDatabase db, ConnectionSource cs) { try { TableUtils.createTable(cs, Contact.class); TableUtils.createTable(cs, PhoneNumber.class); } catch (SQLException e) { throw new RuntimeException(e); } } 2
private RuntimeExceptionDao<Contact, Integer> contactDao; private RuntimeExceptionDao<PhoneNumber, Integer> phoneDao; ! !
! public RuntimeExceptionDao<Contact, Integer> getDaoContact() { if (contactDao == null) { contactDao = getRuntimeExceptionDao(Contact.class); } return contactDao; } public RuntimeExceptionDao<PhoneNumber, Integer> getDaoPhone() { if (phoneDao == null) { phoneDao = getRuntimeExceptionDao(PhoneNumber.class); } return phoneDao; } 2 Extender OrmLiteSqliteOpenHelper (DAO)
private RuntimeExceptionDao<Contact, Integer> contactDao; private RuntimeExceptionDao<PhoneNumber, Integer> phoneDao; ! !
! public RuntimeExceptionDao<Contact, Integer> getDaoContact() { if (contactDao == null) { contactDao = getRuntimeExceptionDao(Contact.class); } return contactDao; } public RuntimeExceptionDao<PhoneNumber, Integer> getDaoPhone() { if (phoneDao == null) { phoneDao = getRuntimeExceptionDao(PhoneNumber.class); } return phoneDao; } 2 Extender OrmLiteSqliteOpenHelper (DAO)
private RuntimeExceptionDao<Contact, Integer> contactDao; private RuntimeExceptionDao<PhoneNumber, Integer> phoneDao; ! !
! public RuntimeExceptionDao<Contact, Integer> getDaoContact() { if (contactDao == null) { contactDao = getRuntimeExceptionDao(Contact.class); } return contactDao; } public RuntimeExceptionDao<PhoneNumber, Integer> getDaoPhone() { if (phoneDao == null) { phoneDao = getRuntimeExceptionDao(PhoneNumber.class); } return phoneDao; } 2 Extender OrmLiteSqliteOpenHelper (DAO)
mDbHelper = new SampleSQLiteHelper(this); ! List<Contact> contacts = mDbHelper.getDaoContact().queryForAll();
setListAdapter(new ContactAdapter(this, contacts)); 3 Usar DAOs (leer)
mDbHelper = new SampleSQLiteHelper(this); ! List<Contact> contacts = mDbHelper.getDaoContact().queryForAll();
setListAdapter(new ContactAdapter(this, contacts)); 3 Usar DAOs (leer)
mDbHelper = new SampleSQLiteHelper(this); ! List<Contact> contacts = mDbHelper.getDaoContact().queryForAll();
setListAdapter(new ContactAdapter(this, contacts)); 3 Usar DAOs (leer) *
public class ContactAdapter extends BaseAdapter { // ...
@Override public View getView(int position, View v, ViewGroup p) { v = inflater.inflate(android.R.layout.simple_list_item_2, p, false); Contact contact = getItem(position); TextView text1 = (TextView) v.findViewById(android.R.id.text1); TextView text2 = (TextView) v.findViewById(android.R.id.text2); text1.setText(contact.getName()); text2.setText(contact.getPhoneNumber().getNumber().toString()); return v; } } * Extra: BaseAdapter
Contact contact = new Contact(); contact.setName(name); PhoneNumber phoneNumber =
new PhoneNumber(); phoneNumber.setNumber(number); contact.setPhoneNumber(phoneNumber); mDbHelper.getDaoContact().create(contact); 3 Usar DAOs (escribir)
Contact contact = new Contact(); contact.setName(name); PhoneNumber phoneNumber =
new PhoneNumber(); phoneNumber.setNumber(number); contact.setPhoneNumber(phoneNumber); mDbHelper.getDaoContact().create(contact); 3 Usar DAOs (escribir)
Contact contact = new Contact(); contact.setName(name); PhoneNumber phoneNumber =
new PhoneNumber(); phoneNumber.setNumber(number); contact.setPhoneNumber(phoneNumber); mDbHelper.getDaoContact().create(contact); 3 Usar DAOs (escribir)
Contact contact = new Contact(); contact.setName(name); PhoneNumber phoneNumber =
new PhoneNumber(); phoneNumber.setNumber(number); contact.setPhoneNumber(phoneNumber); mDbHelper.getDaoContact().create(contact); 3 Usar DAOs (escribir)
Contact contact = new Contact(); contact.setName(name); PhoneNumber phoneNumber =
new PhoneNumber(); phoneNumber.setNumber(number); contact.setPhoneNumber(phoneNumber); mDbHelper.getDaoContact().create(contact); 3 Usar DAOs (escribir) foreignAutoCreate = true
ORM Lite
ORM Lite Fácil de usar Generación automática Transformación tabla-objeto Modelos
Java Más allá de Android No centrado en Android No reaprovecha componentes
None
Content Provider
Content Provider Tablas y columnas Almacenamiento independiente Entre aplicaciones
Ejemplo: Contacts Provider
Ejemplo: Contacts Provider
None
Ejemplo: Contacts Provider
Content Provider
Datos entre aplicaciones Permisos Integrado en Android Complejo Conocimientos avanzados
Sólo una capa Content Provider
None
¿Cuál elijo?
API Nativa Modelo impuesto Control total Rendimiento ORM Lite Objetos
Java Separar capas Urgente Content Provider Información compartida Extensible Integrar
Otras opciones ADA Framework adaframework.com Android Dataframework github.com/javipacheco/Android-DataFramework greenDAO greendao-orm.com/
Sugar ORM satyan.github.io/sugar/ Retrofit (REST) github.com/square/retrofit
+Rafa Vázquez ! sloydev.com " @sloydev