PDF de programación - Bases de datos en Android

Imágen de pdf Bases de datos en Android

Bases de datos en Androidgráfica de visualizaciones

Publicado el 25 de Junio del 2019
674 visualizaciones desde el 25 de Junio del 2019
1,8 MB
56 paginas
Bases de datos en

Android
LSUB, GYSC, URJC

Base de Datos

Relacional

• Permite guardar datos relacionados
• Preservando ACID

http://www.amazon.com/dp/0321197844/

SQL

• Lenguaje estándar (casi todas las

implementaciones tienen extensiones)

http://www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?
csnumber=53681

• Para acceder y manipular bases de datos

relacionales

Álgebra relacional:

Relación

• Una base de datos guarda relaciones: ej. El nombre de
un empleado, su fecha de nacimiento, DNI, puesto, etc.
• Una relación es un conjunto de tuplas de atributos.
Los atributos son como variables (nombre, DNI…).
• Por ejemplo, (Juan Perez, 1998, 12323435J, C/ Luna)
es una tupla, Juan Perez, 1998, C/ Luna son valores
de los atributos de esa dupla.

• Las tuplas de valores son filas, los conjuntos del
elementos i de la tupla de valores son columnas

Teoría de conjuntos:
producto cartesiano

Teoría de conjuntos

Álgebra relacional:

operaciones

• Proyección (quedarme con algunas columnas): SELECT X, Y FROM AA
• Selección (quedarme con algunas filas): SELECT * FROM R WHERE XXX
• Producto Cartesiano: combinar relaciones (tamaño NxM, ojo)

SELECT * FROM R, S (producto cartesiano, CROSS JOIN)
- Producto Cartesiano + Selección XXX (JOIN, INNER JOIN)

SELECT * FROM R JOIN S ON XXX (si ON es una condición de
igualdad EQUIJOIN)

- NATURAL JOIN: join R con S la comparación de los conjuntos de atributos de

igual nombre en

SELECT * FROM R NATURAL JOIN S (es un tipo especial de
equijoin)

• Unión de conjuntos/Diferencia de conjuntos

Álgebra relacional:

operaciones

Álgebra relacional:

operaciones

θ-join: Producto cartesiano + proyección (inner join)

Join en una relación (coche vale más que barca)

Álgebra relacional:

operaciones

Join Natural: Equijoin en los comunes

Álgebra relacional:

operaciones, outer join

Outer Join, como un join pero,
las que no encajan las relleno,
left y right (abajo left outer join)

SELECT A FROM T1
LEFT JOIN T2
ON T1.DEPTNAME== T2.DEPTNAME

Álgebra relacional:

operaciones, outer join

Outer Join: right

SELECT A FROM T1
RIGHT JOIN T2
ON T1.DEPTNAME== T2.DEPTNAME

Claves

diferentes claves (ej: para cambiar un atributo)

• Para identificar unívocamente a una tupla: dos tuplas,
• Puede un atributo o varios
• Se puede asignar automáticamente (AUTOINCREMENT,
• Puede haber más de una clave, pero hay una esencial: clave
• Si un atributo es clave de otra tabla: foreign key, clave ajena
• Índices: traducen de clave a tupla, hay uno siempre, para la

clave primaria, puedo crear otros para ir más rápido (árbol B)

implícita)

primaria

Normalización

• Cuidado al definir las tablas
• Anomalías de actualización:

uno, datos repetidos…

- Ej: La clave son dos atributos, pero los datos dependen de
- Ej: Dos tablas, profesores y clases. En las clases el email del
profesor. Actualizar en dos sitios, quito la clase y pierdo el
email…

• Tres formas normales. Al final:

- Cualquier atributo (no clave) debe decir algo sobre la

clave, toda la clave y nada más que la clave

SQLite

• Implementación de SQL, más detalles:
http://it-ebooks.info/book/147/

es un fichero único.

• Android permite usar bases de datos SQLite de serie.
• No requiere administración. Una base de datos SQLite
• Permite almacenar datos: TEXT (como String de
Java), INTEGER (como long de Java), REAL (como
double de Java), BLOB binario (x’ac23ab’ de longitud
arbitraria)

SQLite

• “Dynamic typing”: cualquier tipo de datos

puede insertarse en cualquier columna
(¡aunque no coincida el tipo!). Ojo.

• Si queremos comprobación de violación de
claves ajenas (foreign keys), hay que activarlo:

PRAGMA foreign_keys = ON;

SQLite

índices, etc.).

• Una base de datos tiene un schema que la define (tablas,
• Toda base de datos tiene una tabla llamada

SQLITE_MASTER (sólo lectura) que representa el esquema
de la base de datos (se actualiza al cambiar el esquema). Sus
columnas son:

• type (TEXT): tabla o índice.
• name (TEXT): nombre.
• tbl_name (TEXT): nombre de la tabla para índices.
• rootpage (INTEGER): estructura de almacenamiento (b-tree).
• sql (TEXT): sentencia que creó la tabla o índice.

SQLite

• Ejemplo:

SQLite

CREATE TABLE Designations (
DesignationId INTEGER PRIMARY KEY AUTOINCREMENT,
Designation TEXT,
Description TEXT
);

SQLite

CREATE TABLE Departments (
DeptId INTEGER PRIMARY KEY AUTOINCREMENT,
DeptName TEXT,
Description TEXT
);

SQLite

CREATE TABLE Employees (
EmpId INTEGER PRIMARY KEY AUTOINCREMENT,
EmpCode INTEGER,
FirstName TEXT,
LastName TEXT,
Email TEXT,
DeptId INTEGER,
DesignationId INTEGER,
ManagerId INTEGER,
Address TEXT,
FOREIGN KEY(DeptId) REFERENCES Departments(DeptId),
FOREIGN KEY(DesignationId) REFERENCES Designations(DesignationId)
);

SQLite

También se puede volcar el esquema con el comando .schema

SQLite

INSERT INTO Departments (
DeptName,
Description
)
VALUES(
"IT",
"Technical staff"
);

INSERT INTO Departments (
DeptName,
Description
)
VALUES(
"Sales",
"Sales executives"
);

SQLite

INSERT INTO Designations (
Designation,
Description
)
VALUES(
"Programmer",
"C and Java developer"
);

SQLite

INSERT INTO Employees (
EmpCode,
FirstName,
LastName,
Email,
DeptId,
DesignationId,
ManagerId,
Address
)
VALUES (
554,
"John",
"Doe",
"j@fuzz.com",
1,
1,
32,
"Foo Rd. 12 D3"
);

SQLite

SELECT * FROM Departments;

SELECT * FROM Designations;

SELECT * FROM Employees;

SELECT FirstName, LastName, DesignationId
FROM Employees WHERE LastName == "Doe";

SQLite

SELECT Employees.FirstName,
Employees.LastName,
Designations.Description
FROM Employees NATURAL JOIN Designations
WHERE Employees.LastName == "Doe" ;

SELECT Employees.FirstName,
Employees.LastName,
Departments.DeptName
FROM Employees NATURAL JOIN Departments
WHERE Employees.LastName == "Doe" ;

SQLite

SELECT Employees.FirstName,
Employees.LastName,
Departments.DeptName,
Designations.Description
FROM Employees
INNER JOIN Designations ON Employees.DesignationId == Designations.DesignationId
INNER JOIN Departments ON Employees.DeptId == Departments.DeptId
WHERE Employees.LastName == "Doe" ;

SQLite

UPDATE Employees SET FirstName = "Manolo"

WHERE EmpId == 1;

SQLite

• DELETE: borra filas.
• DROP: borra tablas/índices.
• Más info:

http://www.sqlite.org/lang.html

SQLiteOpenHelper

• Heredando de esa clase podemos creamos

nuestra clase para acceder a la base de
datos.

• En el constructor, al llamar a super(), hay
que proporcionar el nombre de la base de
datos y la versión que queremos.

• Hay que cerrarlo después de usarlo.

SQLiteOpenHelper

public class DB extends SQLiteOpenHelper {

private final static String NAME = "company.db";
private final static int VERSION = 1;

public DB(Context context){

super(context, NAME, null, VERSION);

}

...

}

SQLiteOpenHelper

• Tendremos que redefinir los métodos:

• onCreate(): se invoca cuando se crea la base de

datos si no existe.

• onUpgrade(): se invoca cuando se invoca super()
con una nueva versión de la DB. Aquí debemos
hacer lo necesario para pasar de una versión a otra
(borrar tablas, crear tablas, etc.).

SQLiteOpenHelper

public final static String DESIGNATIONS = "Designations";

private final static String CREATE_DESIGNATIONS = "CREATE TABLE " + DESIGNATIONS + " (" +

" _id INTEGER PRIMARY KEY AUTOINCREMENT, " +
" Designation TEXT, " +
" Description TEXT);";

private final static String DESIGNATIONS = "Designations";
private final static String EMPLOYEES = "Employees";

// the two other CREATE SQL queries (CREATE_DEPARTMENTS and CREATE_EMPLOYEES) are excluded
...

@Override

public void onCreate(SQLiteDatabase database) {
Log.v(DB.class.getName(),"Creating DB.");
database.execSQL(CREATE_DESIGNATIONS);
database.execSQL(CREATE_DEPARTMENTS);
database.execSQL(CREATE_EMPLOYERS);

private void doReset(SQLiteDatabase database){

database.execSQL("DROP TABLE IF EXISTS " + DESIGNATIONS);
database.execSQL("DROP TABLE IF EXISTS " + DEPARTMENTS);
database.execSQL("DROP TABLE IF EXISTS " + EMPLOYEES);
onCreate(database);

}

}

}

@Override
public void onUpgrade(SQLiteDatabase database, int from, int to) {
Log.v(DB.class.getName(),"Upgrade DB, new version: " + to +

", deleting data");

doReset(database);

SQLiteOpenHelper

• De la clase helper podemos conseguir un
objeto SQLiteDatabase para acceder a los
datos:
• getReadableDatabase(): da acceso de sólo
• getWriteableDatabase(): da acceso de

lectura a la base de datos.

escritura.

SQLiteDatabase

• Esta clase representa una DB tiene
métodos para realizar queries SQL.
• Convenio en Android: la clave primaria de
• Hay que cerrarlo después de usarlo.

una tabla se debe llamar _id

SQLiteDatabase

• insert(), update(), delete(): métodos que facilitan este tipo de

peticiones.

public void insertDepartment(Department d) {

//myHelper is a DB reference (SQLiteOpenHelper)

SQLiteDatabase database = MyHelper.getWritableDatabase();
ContentValues values = new ContentValues();

values.put("DeptName", d.getDeptname());
values.put("Description", d.getDescription());
if(database.insert(DEPARTMENTS, null , val
  • Links de descarga
http://lwp-l.com/pdf16186

Comentarios de: Bases de datos en Android (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios
Es necesario revisar y aceptar las políticas de privacidad