Tecnológico Nacional de México
Ing. en Sistemas Computacionales
Base de Datos para Dispsitivos Móviles
Proyecto integrador con Android, Eclipse, SQLite y archivo de texto
1. Proyecto integrador para SQLite y Android
Realice una app en Android con las siguientes características:
• Debe tener las facilidades de consultar, insertar, eliminar y modificar de
SQLite, en una base de datos llamada AlumnosDB.
• La app debe capturar la pantalla de un proceso de alumnos que contiene
Matrícula, Nombre, Apellidos, y Carrera en una tabla llamada Alumnos.
• La carrera debe ser seleccionada de una lista por lo que debes utilizar el
componente adecuado para generarla.
• La app debe contar con una tabla llamada estadistica que contabilice la
cantidad de estudiantes por carrera por medio de triggers;
• Cada vez que un estudiante es agregado debe incrementarse el contador por
carrera, de igual forma, cuando un estudiante es eliminado debe reducirse el
contador de la carrera correspondiente. Asimismo, si un estudiante es
cambiado de carrera debe restar de la carrera anterior y sumar a la carrera
actual.
• También debe contar con un segundo activity, el cual contendrá un reporte
por carrera indicando cuantos estudiantes hay activos en cada una de las
mismas y pueda generar un archivo de texto con el contenido de la tabla.
• Debes cuidar que cuando se pretenda modificar o eliminar un dato que no
exista enviar a pantalla el mensaje apropiado.
Ejemplo de pantallas a utilizar
2. Programa principal
package com.example.trigger;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.database.sqlite.SQLiteDatabase;
import android.view.View;
import android.widget.EditText;
import android.widget.Toast;
import android.widget.Spinner;
import android.content.Intent;
import android.widget.ArrayAdapter;
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Spinner sp = (Spinner)findViewById(R.id.carrera);
String []carreras = {"IIA","IIND","IGE","ISC","IMEC","IIAS"};
ArrayAdapter<String> adapter = new ArrayAdapter<String>(this,
android.R.layout.simple_spinner_item, carreras);
sp.setAdapter(adapter);
}
@Override
public boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
public void bMat(View v) {
EditText mat = (EditText)findViewById(R.id.mat);
EditText nom = (EditText)findViewById(R.id.nom);
EditText ape = (EditText)findViewById(R.id.ape);
Spinner sp = (Spinner)findViewById(R.id.carrera);
alumSqlHelp dbHelper = new alumSqlHelp (getBaseContext());
SQLiteDatabase dbl = dbHelper.getReadableDatabase();
String[] datos = new String[] {null,null,null,null};
String id= mat.getText().toString();
if (id.trim().length()<=0) {
Toast.makeText(getBaseContext(), "Debe capturar Matricula",
Toast.LENGTH_LONG).show();
return;
}
datos = dbHelper.leer(dbl,id);
if (datos[0]!=null) {
nom.setText(datos[1]);
ape.setText(datos[2]);
int pos=0;
for (pos=0; pos<sp.getCount(); pos++) {
if (datos[3].trim().equals(
sp.getItemAtPosition(pos).toString()))
break;
}
sp.setSelection(pos);
3. } else {
nom.setText("");
ape.setText("");
sp.setSelection(0);
Toast.makeText(getBaseContext(), "Dato no encontrado",
Toast.LENGTH_LONG).show();
}
}
public void gMat(View v) {
EditText mat = (EditText)findViewById(R.id.mat);
EditText nom = (EditText)findViewById(R.id.nom);
EditText ape = (EditText)findViewById(R.id.ape);
alumSqlHelp dbHelper = new alumSqlHelp (getBaseContext());
SQLiteDatabase dbl = dbHelper.getReadableDatabase();
String[] datos = new String[] {null,null,null,null};
String id= mat.getText().toString();
id=id.trim();
if (id.length()<=0) {
Toast.makeText(getBaseContext(), "Debe capturar Matricula",
Toast.LENGTH_LONG).show();
return;
}
datos = dbHelper.leer(dbl,id);
if (datos[0]!=null) {
datos[0]=id;
datos[1]=nom.getText().toString();
datos[2]=ape.getText().toString();
datos[3]=leeSP();
dbHelper.cambiar(dbl, datos);
Toast.makeText(getBaseContext(), "Datos Modificados",
Toast.LENGTH_LONG).show();
} else {
datos[0]=id;
datos[1]=nom.getText().toString();
datos[2]=ape.getText().toString();
datos[3]=leeSP();
dbHelper.insertar(dbl, datos);
String[] datos2 = new String[] {null,null};
datos2 = dbHelper.leerCTA(dbl,"ISC");
Toast.makeText(getBaseContext(), "Datos Insertados",
Toast.LENGTH_LONG).show();
}
}
public void eMat(View v) {
EditText mat = (EditText)findViewById(R.id.mat);
alumSqlHelp dbHelper = new alumSqlHelp (getBaseContext());
SQLiteDatabase dbl = dbHelper.getReadableDatabase();
String[] datos = new String[] {null,null,null,null};
String id= mat.getText().toString();
id=id.trim();
if (id.length()<=0) {
Toast.makeText(getBaseContext(), "Debe capturar Matricula",
Toast.LENGTH_LONG).show();
return;
}
4. datos = dbHelper.leer(dbl,id);
if (datos[0]!=null) {
dbHelper.eliminar(dbl, id);
Toast.makeText(getBaseContext(), "Datos Eliminados",
Toast.LENGTH_LONG).show();
limpiar();
} else {
Toast.makeText(getBaseContext(),
"Datos no encontrados, intente de nuevo",
Toast.LENGTH_LONG).show();
}
}
public void genRep(View v) {
Intent i = new Intent(this, reporte.class);
startActivity(i);
}
public String leeSP() {
Spinner sp = (Spinner)findViewById(R.id.carrera);
String selec=sp.getSelectedItem().toString();
return selec;
}
public void limpiar() {
EditText mat = (EditText)findViewById(R.id.mat);
EditText nom = (EditText)findViewById(R.id.nom);
EditText ape = (EditText)findViewById(R.id.ape);
Spinner sp = (Spinner)findViewById(R.id.carrera);
mat.setText("");
nom.setText("");
ape.setText("");
sp.setSelection(0);
}
public void salir(View view) {
finish();
}
}
5. Programa que controla la BD en SQLite
package com.example.alumnos;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;
import android.util.Log;
import android.database.Cursor;
public class alumSqlHelp extends SQLiteOpenHelper {
private static int version = 1;
private static String name = "AlumnosDb" ;
private static CursorFactory factory = null;
public alumSqlHelp(Context context)
{
super(context, name, factory, version);
}
@Override
public void onCreate(SQLiteDatabase db)
{
try {
db.execSQL("CREATE TABLE Alumnos(" +
" al_mat INTEGER PRIMARY KEY not null," +
" al_nom TEXT NOT NULL, " +
" al_ape TEXT NOT NULL, " +
" al_car TEXT NOT NULL )" );
Log.d("Alumnos", "Tabla creada");
db.execSQL("CREATE TABLE AlumCTA(" +
" alc_carrera text PRIMARY KEY not null," +
" alc_conta INTEGER NOT NULL)" );
Log.d("AlumCTA", "Tabla creada");
} catch (Exception e) {
Log.d("tablas", "Tablas NO creadas");
}
db.execSQL("INSERT INTO AlumCTA VALUES('IIA',0)");
db.execSQL("INSERT INTO AlumCTA VALUES('IIND',0)");
db.execSQL("INSERT INTO AlumCTA VALUES('IGE',0)");
db.execSQL("INSERT INTO AlumCTA VALUES('ISC',0)");
db.execSQL("INSERT INTO AlumCTA VALUES('IMEC',0)");
db.execSQL("INSERT INTO AlumCTA VALUES('IIAS',0)");
db.execSQL("CREATE trigger contINS after insert on " +
" Alumnos begin"+
" UPDATE AlumCTA set alc_conta=alc_conta+1 " +
" where alc_carrera=NEW.al_car; end; ");
Log.d("AlumnosDB", "Trigger consINS Creado");
db.execSQL("CREATE trigger contDEL after delete on " +
" Alumnos begin"+
" UPDATE AlumCTA set alc_conta=alc_conta-1 "+
" where alc_carrera=OLD.al_car; end; ");
Log.d("AlumnosDB", "Trigger consDEL Creado");
db.execSQL("CREATE trigger contUPD after update on " +
"Alumnos begin"+
" UPDATE AlumCTA set alc_conta=alc_conta-1 "+
" where alc_carrera=OLD.al_car; "+
" UPDATE AlumCTA set alc_conta=alc_conta+1 "+
6. " where alc_carrera=NEW.al_car; end;");
Log.d("AlumnosDB", "Trigger consUPD Creado");
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion,
int newVersion)
{
Log.d("onUpgrade",
"entrada al sistema sin creacion de tablas");
}
public String[] leer(SQLiteDatabase db, String mat)
{
String[] campos = new String[] {
"al_mat", "al_nom","al_ape","al_car"};
String[] args = new String[] {mat};
String[] dato = new String[] {null,null,null,null};
Cursor c = db.query("Alumnos", campos, "al_mat = ?",
args, null, null, null);
if (c.moveToFirst()) {
dato[0] = c.getString(0);
dato[1] = c.getString(1);
dato[2] = c.getString(2);
dato[3] = c.getString(3);
}
return dato;
}
public void insertar(SQLiteDatabase db, String [] datos)
{
String cadena ="INSERT INTO Alumnos VALUES("+
datos[0]+",'"+datos[1]+"','"+
datos[2]+"','"+datos[3]+"')";
db.execSQL(cadena);
}
public void cambiar(SQLiteDatabase db, String [] datos)
{
String cadena ="update Alumnos set "+
"al_nom='"+datos[1]+"', "+
"al_ape='"+datos[2]+"', "+
"al_car='"+ datos[3]+"' "+
"where al_mat ="+datos[0];
db.execSQL(cadena);
}
public void eliminar(SQLiteDatabase db, String mat)
{
String cadena ="delete from Alumnos "+
"where al_mat ="+mat;
db.execSQL(cadena);
}
public String[] leerCTA(SQLiteDatabase db, String carr)
{
String[] campos = new String[] {"alc_carrera",
7. "alc_conta"};
String[] args = new String[] {carr};
String[] dato = new String[] {null,null};
Cursor c = db.query("AlumCTA", campos, "alc_carrera = ?",
args, null, null, null);
if (c.moveToFirst()) {
dato[0] = c.getString(0);
dato[1] = c.getString(1);
}
return dato;
}
}