SlideShare a Scribd company logo
1 of 58
Download to read offline
Android Databases
Android Databases
Comparación | Alternativas
SQLite
SQLite
Sencillo
Ligero
Embebido
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
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
Content Provider
Content Provider
Tablas y columnas
Almacenamiento independiente
Entre aplicaciones
Ejemplo: Contacts Provider
Ejemplo: Contacts Provider
Ejemplo: Contacts Provider
Content Provider
Datos entre aplicaciones
Permisos
Integrado en Android
Complejo
Conocimientos avanzados
Sólo una capa
Content Provider
¿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

More Related Content

What's hot

การเขียนคำสั่งควบคุมขั้นพื้นฐาน 2
การเขียนคำสั่งควบคุมขั้นพื้นฐาน 2การเขียนคำสั่งควบคุมขั้นพื้นฐาน 2
การเขียนคำสั่งควบคุมขั้นพื้นฐาน 2
Tay Atcharawan
 
Ext GWT 3.0 Advanced Templates
Ext GWT 3.0 Advanced TemplatesExt GWT 3.0 Advanced Templates
Ext GWT 3.0 Advanced Templates
Sencha
 

What's hot (17)

Yolygambas
YolygambasYolygambas
Yolygambas
 
Java File
Java FileJava File
Java File
 
การเขียนคำสั่งควบคุมขั้นพื้นฐาน 2
การเขียนคำสั่งควบคุมขั้นพื้นฐาน 2การเขียนคำสั่งควบคุมขั้นพื้นฐาน 2
การเขียนคำสั่งควบคุมขั้นพื้นฐาน 2
 
Oracle: DDL
Oracle: DDLOracle: DDL
Oracle: DDL
 
Erlang for data ops
Erlang for data opsErlang for data ops
Erlang for data ops
 
supporting t-sql scripts for Heap vs clustered table
supporting t-sql scripts for Heap vs clustered tablesupporting t-sql scripts for Heap vs clustered table
supporting t-sql scripts for Heap vs clustered table
 
MYSQL
MYSQLMYSQL
MYSQL
 
Android Testing
Android TestingAndroid Testing
Android Testing
 
Ext GWT 3.0 Advanced Templates
Ext GWT 3.0 Advanced TemplatesExt GWT 3.0 Advanced Templates
Ext GWT 3.0 Advanced Templates
 
iRODS Rule Language Cheat Sheet
iRODS Rule Language Cheat SheetiRODS Rule Language Cheat Sheet
iRODS Rule Language Cheat Sheet
 
20220112 sac v1
20220112 sac v120220112 sac v1
20220112 sac v1
 
37c
37c37c
37c
 
Scala in practice
Scala in practiceScala in practice
Scala in practice
 
Reactive clean architecture
Reactive clean architectureReactive clean architecture
Reactive clean architecture
 
Produce nice outputs for graphical, tabular and textual reporting in R-Report...
Produce nice outputs for graphical, tabular and textual reporting in R-Report...Produce nice outputs for graphical, tabular and textual reporting in R-Report...
Produce nice outputs for graphical, tabular and textual reporting in R-Report...
 
Using database in android
Using database in androidUsing database in android
Using database in android
 
Java script
Java scriptJava script
Java script
 

Viewers also liked

图们江冰雪节
图们江冰雪节图们江冰雪节
图们江冰雪节
ericotaku
 
Využití PC pro postižené děti
Využití PC pro postižené dětiVyužití PC pro postižené děti
Využití PC pro postižené děti
miluska01
 
Arquitectura aplicaciones clase3
Arquitectura aplicaciones clase3Arquitectura aplicaciones clase3
Arquitectura aplicaciones clase3
Germania Rodriguez
 
Carlo Manna E Andrea Fidanza Le Fonti Rinnovabili 2010
Carlo Manna E Andrea Fidanza   Le Fonti Rinnovabili 2010Carlo Manna E Andrea Fidanza   Le Fonti Rinnovabili 2010
Carlo Manna E Andrea Fidanza Le Fonti Rinnovabili 2010
Matteo Magistrelli
 

Viewers also liked (8)

OAuth
OAuthOAuth
OAuth
 
图们江冰雪节
图们江冰雪节图们江冰雪节
图们江冰雪节
 
Využití PC pro postižené děti
Využití PC pro postižené dětiVyužití PC pro postižené děti
Využití PC pro postižené děti
 
Experimenting With Static Electricity
Experimenting With Static ElectricityExperimenting With Static Electricity
Experimenting With Static Electricity
 
Presentación Sevibus Wear
Presentación Sevibus WearPresentación Sevibus Wear
Presentación Sevibus Wear
 
Arquitectura aplicaciones clase3
Arquitectura aplicaciones clase3Arquitectura aplicaciones clase3
Arquitectura aplicaciones clase3
 
Buenas prácticas en el desarrollo Android - Imaginática 2013
Buenas prácticas en el desarrollo Android - Imaginática 2013Buenas prácticas en el desarrollo Android - Imaginática 2013
Buenas prácticas en el desarrollo Android - Imaginática 2013
 
Carlo Manna E Andrea Fidanza Le Fonti Rinnovabili 2010
Carlo Manna E Andrea Fidanza   Le Fonti Rinnovabili 2010Carlo Manna E Andrea Fidanza   Le Fonti Rinnovabili 2010
Carlo Manna E Andrea Fidanza Le Fonti Rinnovabili 2010
 

Similar to Android databases

Scala in practice
Scala in practiceScala in practice
Scala in practice
patforna
 

Similar to Android databases (20)

Exemple de création de base
Exemple de création de baseExemple de création de base
Exemple de création de base
 
Better Data Persistence on Android
Better Data Persistence on AndroidBetter Data Persistence on Android
Better Data Persistence on Android
 
greenDAO
greenDAOgreenDAO
greenDAO
 
New text document
New text documentNew text document
New text document
 
PHP and Mysql
PHP and MysqlPHP and Mysql
PHP and Mysql
 
Kill the DBA
Kill the DBAKill the DBA
Kill the DBA
 
Android Sample Project By Wael Almadhoun
Android Sample Project By Wael AlmadhounAndroid Sample Project By Wael Almadhoun
Android Sample Project By Wael Almadhoun
 
Accessing data with android cursors
Accessing data with android cursorsAccessing data with android cursors
Accessing data with android cursors
 
Accessing data with android cursors
Accessing data with android cursorsAccessing data with android cursors
Accessing data with android cursors
 
JDK 8
JDK 8JDK 8
JDK 8
 
Save data in to sqlite
Save data in to sqliteSave data in to sqlite
Save data in to sqlite
 
3 database-jdbc(1)
3 database-jdbc(1)3 database-jdbc(1)
3 database-jdbc(1)
 
Entity Framework Core & Micro-Orms with Asp.Net Core
Entity Framework Core & Micro-Orms with Asp.Net CoreEntity Framework Core & Micro-Orms with Asp.Net Core
Entity Framework Core & Micro-Orms with Asp.Net Core
 
Developing Applications with MySQL and Java for beginners
Developing Applications with MySQL and Java for beginnersDeveloping Applications with MySQL and Java for beginners
Developing Applications with MySQL and Java for beginners
 
Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#Mixing functional and object oriented approaches to programming in C#
Mixing functional and object oriented approaches to programming in C#
 
Android sq lite-chapter 22
Android sq lite-chapter 22Android sq lite-chapter 22
Android sq lite-chapter 22
 
A evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no androidA evolução da persistência de dados (com sqlite) no android
A evolução da persistência de dados (com sqlite) no android
 
Android Data Persistence
Android Data PersistenceAndroid Data Persistence
Android Data Persistence
 
Scala in practice
Scala in practiceScala in practice
Scala in practice
 
1670595076250.pdf
1670595076250.pdf1670595076250.pdf
1670595076250.pdf
 

Recently uploaded

CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
anilsa9823
 
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
anilsa9823
 

Recently uploaded (7)

Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
Call US Pooja 9892124323 ✓Call Girls In Mira Road ( Mumbai ) secure service,
 
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost LoverPowerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
Powerful Love Spells in Arkansas, AR (310) 882-6330 Bring Back Lost Lover
 
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort ServiceBDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
BDSM⚡Call Girls in Sector 71 Noida Escorts >༒8448380779 Escort Service
 
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual serviceCALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
CALL ON ➥8923113531 🔝Call Girls Saharaganj Lucknow best sexual service
 
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun serviceCALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
CALL ON ➥8923113531 🔝Call Girls Gomti Nagar Lucknow best Night Fun service
 
9892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x79892124323 | Book Call Girls in Juhu and escort services 24x7
9892124323 | Book Call Girls in Juhu and escort services 24x7
 
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCRFULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
FULL ENJOY - 9999218229 Call Girls in {Mahipalpur}| Delhi NCR
 

Android databases

  • 5.
  • 8. 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
  • 9. 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
  • 10. 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
  • 11. 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
  • 12. 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
  • 13. 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
  • 14. 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
  • 15. 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
  • 16. 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
  • 17. 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
  • 18. 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
  • 19. 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
  • 20. 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
  • 21. 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
  • 23. API Nativa Simple (no sencilla) Documentación Control y rendimiento Más código, más sucio Tendencia a errores Difícil de mantener
  • 24.
  • 27. 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
  • 28. Definir modelo (Teléfono) @DatabaseTable
 public class PhoneNumber {
 
 @DatabaseField(generatedId = true)
 private int id;
 
 @DatabaseField
 private int number;
 }
 1
  • 29. 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
  • 30. 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
  • 31. 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)
  • 32. 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)
  • 33. 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)
  • 34. mDbHelper = new SampleSQLiteHelper(this); ! List<Contact> contacts = mDbHelper.getDaoContact().queryForAll(); 
 setListAdapter(new ContactAdapter(this, contacts)); 3 Usar DAOs (leer)
  • 35. mDbHelper = new SampleSQLiteHelper(this); ! List<Contact> contacts = mDbHelper.getDaoContact().queryForAll(); 
 setListAdapter(new ContactAdapter(this, contacts)); 3 Usar DAOs (leer)
  • 36. mDbHelper = new SampleSQLiteHelper(this); ! List<Contact> contacts = mDbHelper.getDaoContact().queryForAll(); 
 setListAdapter(new ContactAdapter(this, contacts)); 3 Usar DAOs (leer) *
  • 37. 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
  • 38. 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)
  • 39. 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)
  • 40. 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)
  • 41. 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)
  • 42. 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
  • 44. 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
  • 45.
  • 47. Content Provider Tablas y columnas Almacenamiento independiente Entre aplicaciones
  • 50.
  • 53. Datos entre aplicaciones Permisos Integrado en Android Complejo Conocimientos avanzados Sólo una capa Content Provider
  • 54.
  • 56. API Nativa Modelo impuesto Control total Rendimiento ORM Lite Objetos Java Separar capas Urgente Content Provider Información compartida Extensible Integrar
  • 57. 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