38
Instituto Tecnológico de Zacatecas Departamento de Sistemas y Computación Ingeniería en Sistemas Computacionales Taller de Aplicaciones Móviles Grupo “B” Ejercicios del Capítulo IV, Almacenamiento de Datos. Alumno y Número de control: Bernardo Dávila Jiménez Fecha: 2014/12/02

Dispositivos Moviles

Embed Size (px)

DESCRIPTION

Practica de Dispositivos Moviles

Citation preview

Instituto Tecnolgico de Zacatecas

Departamento de Sistemas y Computacin

Ingeniera en Sistemas ComputacionalesTaller de Aplicaciones Mviles Grupo BEjercicios del Captulo IV, Almacenamiento de Datos. Alumno y Nmero de control:

Bernardo Dvila JimnezFecha: 2014/12/02Contenido31.Ejercicios del Captulo 4

31.1Ejercicio 4.0

31.1.2 Descripcin del problema

31.1.3 Diseo en UML

41.1.4 Pantallas del Ejercicio en Ejecucin

72.0 Cdigo

72.1 activity_main.xml

82.2 MainActivity.java

112.3 Activity (.xml y .java) (pantalla donde muestra el ListView)

263Actividad de Investigacin

263.1SQLite

293.2Clases de Almacenamiento en base de datos.

304 Referencias

Tabla de ilustraciones4Ilustracin 1

5Ilustracin 2

6Ilustracin 3

1. Ejercicios del Captulo 41.1 Ejercicio 4.01.1.2 Descripcin del problema

Se realizara una aplicacin conjunta con una base de datos relacionada a la unidad pasada en este caso para el control de materias, donde se puedan insertar, eliminar, modificar y consultar las materias desde una base de datos.1.1.3 Diseo en UML

1.1.4 Pantallas del Ejercicio en Ejecucin

Ilustracin 1

Ilustracin 2

Ilustracin 3

2.0 Cdigo

2.1 activity_main.xml

2.2 MainActivity.java

package com.example.db_materias;

import sql.Conexion;

import android.app.Activity;

import android.content.Intent;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

public class MainActivity extends Activity implements OnClickListener{

Button btnAgregar,btnEliminar,btnModificar,btnConsulta;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_main);

btnAgregar=(Button)findViewById(R.id.btnAgregar);

btnModificar=(Button)findViewById(R.id.btnModificar);

btnEliminar=(Button)findViewById(R.id.btnEliminar);

btnConsulta=(Button)findViewById(R.id.btnConsulta);

btnAgregar.setOnClickListener(this);

btnEliminar.setOnClickListener(this);

btnConsulta.setOnClickListener(this);

btnModificar.setOnClickListener(this);

Conexion conexion = new Conexion(getApplicationContext(),"BDMateria.db",null,1);

SQLiteDatabase db= conexion.getWritableDatabase();

}

@Override

public boolean onCreateOptionsMenu(Menu menu) {

// Inflate the menu; this adds items to the action bar if it is present.

getMenuInflater().inflate(R.menu.main, menu);

return true;

}

@Override

public boolean onOptionsItemSelected(MenuItem item) {

// Handle action bar item clicks here. The action bar will

// automatically handle clicks on the Home/Up button, so long

// as you specify a parent activity in AndroidManifest.xml.

int id = item.getItemId();

if (id == R.id.action_settings) {

return true;

}

return super.onOptionsItemSelected(item);

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId())

{

case R.id.btnAgregar:

Intent i= new Intent(getApplicationContext(),Datos_materia.class);

startActivity(i);

break;

case R.id.btnConsulta:

Intent i2= new Intent(getApplicationContext(),Consultas_generales.class);

startActivity(i2);

break;

case R.id.btnEliminar:

Intent i3= new Intent(getApplicationContext(),Eliminar.class);

startActivity(i3);

break;

case R.id.btnModificar:

Intent i4= new Intent(getApplicationContext(),Modificar.class);

startActivity(i4);

break;

}//switch

}//onClick

}//Class2.3 Activity (.xml y .java) (pantalla donde muestra el ListView)Activity_consultasgenerales.xml

Consultas_generales.java

package com.example.db_materias;

import java.util.ArrayList;

import sql.Conexion;

import bean.Materias;

import android.app.Activity;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.Toast;

public class Consultas_generales extends Activity {

ListView lvMateria;

Materias materias;

ArrayList lista=new ArrayList();

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_consultas_generales);

lvMateria=(ListView)findViewById(R.id.lvMateria);

Conexion conexion = new Conexion(getApplicationContext(),"BDMateria.db",null,1);

SQLiteDatabase db = conexion.getReadableDatabase();

Cursor c = db.rawQuery("SELECT * FROM materias",null );

if(c.moveToFirst())

{

do{

materias = new Materias(c.getInt(0),c.getString(1),c.getString(2),c.getString(3),c.getString(4),c.getString(5));

lista.add(materias);

}while(c.moveToNext());

}

else

{

Toast t = Toast.makeText(getApplicationContext(),"No hay Registros",Toast.LENGTH_SHORT);

t.show();

}

ArrayAdapter adap = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1,lista);

lvMateria.setAdapter(adap);

}

}datos_actualizar.xml

Datos_actualizar.java

package com.example.db_materias;

import sql.Conexion;

import android.app.Activity;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

public class Datos_actualizar extends Activity implements OnClickListener{

EditText etNombre,etProfesor,etDuracion,etCreditos,etSalon;

Button btnGuardar;

Bundle b = new Bundle();

int id;

Boolean bandera;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_datos_actualizar);

etNombre = (EditText) findViewById(R.id.etNombre);

etProfesor = (EditText) findViewById(R.id.etProfesor);

etDuracion = (EditText) findViewById(R.id.etDuracion);

etCreditos = (EditText) findViewById(R.id.etCreditos);

etSalon = (EditText) findViewById(R.id.etSalon);

btnGuardar = (Button) findViewById(R.id.btnGuardar);

btnGuardar.setOnClickListener(this);

b = getIntent().getExtras();

if (b != null) {

id = b.getInt("id");

bandera = b.getBoolean("bandera");

etNombre.setText(b.getString("nombre"));

etProfesor.setText(b.getString("profesor"));

etDuracion.setText(b.getString("duracion"));

etCreditos.setText(b.getString("creditos"));

etSalon.setText(b.getString("salon"));

}//if

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch (v.getId()) {

case R.id.btnGuardar:

Conexion conexion = new Conexion(getApplicationContext(),"BDMateria.db", null, 1);

SQLiteDatabase db = conexion.getWritableDatabase();

// conexion.insertarSerie(db,nombre,temporada,episodio);

String sql = "UPDATE materias SET id="+id+ ",nombre=" + etNombre.getText().toString() + ", profesor=" + etProfesor.getText().toString() + ", duracion=" + etDuracion.getText().toString() + ", creditos=" + etCreditos.getText().toString() + ", salon=" + etSalon.getText().toString() + "WHERE _id=" + id + ";";

db.execSQL(sql);

break;

default:

break;

}

}

}

Activity_datos_materia.xml

datos_materia.java

package com.example.db_materias;

import sql.Conexion;

import android.app.Activity;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.view.View.OnClickListener;

import android.widget.Button;

import android.widget.EditText;

public class Datos_materia extends Activity implements OnClickListener{

EditText etNombre,etProfesor,etDuracion,etCreditos,etSalon;

Button btnGuardar;

Bundle b=new Bundle();

int id;

Boolean bandera;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_datos_materia);

etNombre = (EditText) findViewById(R.id.etNombre);

etProfesor=(EditText) findViewById(R.id.etProfesor);

etDuracion=(EditText) findViewById(R.id.etDuracion);

etCreditos=(EditText) findViewById(R.id.etCreditos);

etSalon=(EditText) findViewById(R.id.etSalon);

btnGuardar = (Button) findViewById(R.id.btnGuardar);

btnGuardar.setOnClickListener(this);

b = getIntent().getExtras();

if (b != null) {

id = b.getInt("id");

bandera = b.getBoolean("bandera");

etNombre.setText(b.getString("nombre"));

etProfesor.setText(b.getString("profesor"));

etDuracion.setText(b.getString("duracion"));

etCreditos.setText(b.getString("creditos"));

etSalon.setText(b.getString("salon"));

}//if

}

@Override

public void onClick(View v) {

// TODO Auto-generated method stub

switch(v.getId()){

case R.id.btnGuardar:

Conexion conexion = new Conexion(getApplicationContext(),"BDMateria.db", null, 1);

SQLiteDatabase db = conexion.getWritableDatabase();

String sql = "INSERT INTO materias(nombre,profesor,duracion,creditos,salon) VALUES('"

+ etNombre.getText().toString()

+ "','"

+ etProfesor.getText().toString()

+ "','"

+ etDuracion.getText().toString()

+ "','"

+ etCreditos.getText().toString()

+ "','"

+ etSalon.getText().toString()

+ "')";

db.execSQL(sql);

etNombre.setText("");

etProfesor.setText("");

etDuracion.setText("");

etCreditos.setText("");

etSalon.setText("");

}

}

}

Activity_eliminar.xml

Eliminar.java

package com.example.db_materias;

import java.util.ArrayList;

import sql.Conexion;

import bean.Materias;

import android.app.Activity;

import android.app.AlertDialog;

import android.app.Dialog;

import android.content.DialogInterface;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.Toast;

import android.widget.AdapterView.OnItemClickListener;

public class Eliminar extends Activity {

ListView lvEliminar;

Materias materias;

ArrayList lista = new ArrayList();

int posicion;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_eliminar);

lvEliminar = (ListView) findViewById(R.id.lvEliminar);

Conexion conexion = new Conexion(getApplicationContext(), "BDMateria.db",

null, 1);

SQLiteDatabase db = conexion.getReadableDatabase();

Cursor c = db.rawQuery("SELECT * FROM materias", null);

if (c.moveToFirst()) {

do {

materias = new Materias(c.getInt(0), c.getString(1), c.getString(2),c.getString(3),c.getString(4),c.getString(5));

lista.add(materias);

} while (c.moveToNext());

}

else {

Toast t = Toast.makeText(getApplicationContext(),"No hay registros", Toast.LENGTH_SHORT);

t.show();

}

ArrayAdapter adap = new ArrayAdapter(getApplicationContext(), android.R.layout.simple_list_item_1,lista);

lvEliminar.setAdapter(adap);

lvEliminar.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view,

int position, long id) {

// TODO Auto-generated method stub

posicion = position;

AlertDialog.Builder constructorDialogo = new AlertDialog.Builder(

Eliminar.this);

constructorDialogo.setTitle("Eliminar");

constructorDialogo

.setMessage("Seguro que desea eliminar esta materia?");

constructorDialogo.setPositiveButton("Si",

new DialogInterface.OnClickListener() {

@Override

public void onClick(DialogInterface dialog,

int which) {

int id = lista.get(posicion).getId();

Conexion conexion = new Conexion(

getApplicationContext(), "BDMateria.db",

null, 1);

SQLiteDatabase db = conexion

.getWritableDatabase();

String sql = "DELETE FROM materias where id="

+ id + ";";

db.execSQL(sql);

Toast.makeText(getApplicationContext(),

"Eliminado", Toast.LENGTH_SHORT).show();

}

});

constructorDialogo.setNegativeButton("No", null);

Dialog miDialogo = constructorDialogo.create();

miDialogo.show();

}

});

}

}

Activity_modificar.xml

Modificar.java

package com.example.db_materias;

import java.util.ArrayList;

import sql.Conexion;

import bean.Materias;

import android.app.Activity;

import android.content.Intent;

import android.database.Cursor;

import android.database.sqlite.SQLiteDatabase;

import android.os.Bundle;

import android.view.Menu;

import android.view.MenuItem;

import android.view.View;

import android.widget.AdapterView;

import android.widget.ArrayAdapter;

import android.widget.ListView;

import android.widget.Toast;

import android.widget.AdapterView.OnItemClickListener;

public class Modificar extends Activity {

ListView lvModificar;

Materias materias;

ArrayList lista = new ArrayList();

int posicion;

@Override

protected void onCreate(Bundle savedInstanceState) {

super.onCreate(savedInstanceState);

setContentView(R.layout.activity_modificar);

lvModificar = (ListView) findViewById(R.id.lvModificar);

Conexion conexion = new Conexion(getApplicationContext(), "BDMateria.db",null, 1);

SQLiteDatabase db = conexion.getReadableDatabase();

Cursor c = db.rawQuery("SELECT * FROM materias", null);

if (c.moveToFirst()) {

do {

materias = new Materias(c.getInt(0), c.getString(1), c.getString(2),c.getString(3),c.getString(4),c.getString(5));

lista.add(materias);

} while (c.moveToNext());

}

else {

Toast t = Toast.makeText(getApplicationContext(),

"No hay registros", Toast.LENGTH_SHORT);

t.show();

}

ArrayAdapter adap = new ArrayAdapter(

getApplicationContext(), android.R.layout.simple_list_item_1,

lista);

lvModificar.setAdapter(adap);

lvModificar.setOnItemClickListener(new OnItemClickListener() {

@Override

public void onItemClick(AdapterView parent, View view,

int position, long id) {

// TODO Auto-generated method stub

posicion=position;

int idSerie=lista.get(posicion).getId();

String nombre=lista.get(posicion).getNombre();

String profesor=lista.get(posicion).getProfesor();

String duracion=lista.get(posicion).getDuracion();

String creditos=lista.get(posicion).getCreditos();

String salon=lista.get(posicion).getSalon();

Intent i = new Intent(Modificar.this, Datos_actualizar.class);

i.putExtra("id", idSerie);

i.putExtra("nombre", nombre);

i.putExtra("profesor", profesor);

i.putExtra("duracion", duracion);

i.putExtra("creditos", creditos);

i.putExtra("salon", salon);

i.putExtra("bandera",true);

startActivity(i);

}

});

}

}

Materias.java

package bean;

public class Materias {

int id;

String nombre,profesor,duracion,creditos,salon;

public Materias(int id, String nombre, String profesor, String duracion,

String creditos, String salon) {

super();

this.id = id;

this.nombre = nombre;

this.profesor = profesor;

this.duracion = duracion;

this.creditos = creditos;

this.salon = salon;

}

public int getId() {

return id;

}

public void setId(int id) {

this.id = id;

}

public String getNombre() {

return nombre;

}

public void setNombre(String nombre) {

this.nombre = nombre;

}

public String getProfesor() {

return profesor;

}

public void setProfesor(String profesor) {

this.profesor = profesor;

}

public String getDuracion() {

return duracion;

}

public void setDuracion(String duracion) {

this.duracion = duracion;

}

public String getCreditos() {

return creditos;

}

public void setCreditos(String creditos) {

this.creditos = creditos;

}

public String getSalon() {

return salon;

}

public void setSalon(String salon) {

this.salon = salon;

}

@Override

public String toString() {

return "Materias [id=" + id + ", nombre=" + nombre + ", profesor="

+ profesor + ", duracion=" + duracion + ", creditos="

+ creditos + ", salon=" + salon + "]";

}

}3 Actividad de Investigacin

3.1 SQLite El uso de las bases de datos ya se ha extendido de los servidores hacia los dispositivos mviles. El desarrollo constante de la tecnologa conjuntamente con los nuevos requerimientos de las empresas ha llevado a crear diversos mtodos de almacenamiento de informacin en dispositivos mviles, embebidos y empotrados.

La demanda de bases de datos para dispositivos mviles como PDAs y telfonos celulares ha crecido exponencialmente en los ltimos aos debido a la necesidad de las empresas de tener la informacin al instante de lo que sucede en el campo y as responder ms rpidamente ante la competencia. Esta necesidad ha provocado que el almacenamiento de los datos en estos dispositivos haya mejorado tanto en capacidad como en herramientas. Gracias a esto, actualmente contamos con diversas opciones de manejadores de bases de datos para mviles, y una de mis favoritas es SQLite, que es en la que se enfoca este artculo.

Qu es SQLite?

SQLite es una herramienta de software libre, que permite almacenar informacin en dispositivos empotrados de una forma sencilla, eficaz, potente, rpida y en equipos con pocas capacidades de hardware, como puede ser una PDA o un telfono celular. SQLite implementa el estndar SQL92 y tambin agrega extensiones que facilitan su uso en cualquier ambiente de desarrollo. Esto permite que SQLite soporte desde las consultas ms bsicas hasta las ms complejas del lenguaje SQL, y lo ms importante es que se puede usar tanto en dispositivos mviles como en sistemas de escritorio, sin necesidad de realizar procesos complejos de importacin y exportacin de datos, ya que existe compatibilidad al 100% entre las diversas plataformas disponibles, haciendo que la portabilidad entre dispositivos y plataformas sea transparente.

Historia

SQLite apareci en mayo del ao 2000 de la mano de su creador D. Richard Hip, quin ha liberado las diferentes versiones de SQLite en base a la licencia GPL por lo que su cdigo es de dominio pblico y puede ser modificado por cualquier persona. Gracias a esto, SQLite ha sido mejorada a lo largo de 7 aos por un gran nmero de colaboradores y tambin ha sido migrada a diversas plataformas.

Caractersticas

Estas son algunas de las caractersticas principales de SQLite:

La base de datos completa se encuentra en un solo archivo.

Puede funcionar enteramente en memoria, lo que la hace muy rpida.

Tiene un footprint menor a 230KB.

Es totalmente autocontenida (sin dependencias externas).

Cuenta con libreras de acceso para muchos lenguajes de programacin.

Soporta texto en formato UTF-8 y UTF-16, as como datos numricos de 64 bits.

Soporta funciones SQL definidas por el usuario (UDF).

El cdigo fuente es de dominio pblico y se encuentra muy bien documentado.

Plataformas de SQLite

SQLite est construida en C, lo cual facilita la migracin a diversas plataformas de sistemas operativos y de dispositivos. Dado que una base de datos de SQLite se almacena por completo en un solo archivo, est puede ser exportada a cualquier otra plataforma y tener interoperatibilidad al 100% sin ningn requerimiento de programacin adicional o cambios de configuracin.

Las plataformas principales dnde SQLite se encuentra funcionando son:

Windows 95, 98, ME, 2000, XP y Vista

Windows CE & Pocket PC

Mac OSX

Linux

OpenEmbedded

PalmOS

Symbian

Lenguajes de Programacin de SQLite

Gracias a que SQLite es software libre, es posible encontrar una gran cantidad de componentes, libreras y drivers para interactuar con SQLite desde una gran diversidad de lenguajes y plataformas de programacin. Ya sea que estemos utilizando lenguajes modernos como Java, Perl, Python, PHP, Ruby, C#, lenguajes ms antiguos como Pascal, SmallTalk, Clipper, o lenguajes poco conocidos como Suneido, REXX, S-Lang, para todos podemos encontrar libreras y ejemplos de cdigo para SQLite.

http://www.sqlite.org/cvstrac/wiki?p=SqliteWrappers ofrece ms informacin sobre wrappers para SQLite sobre diferentes plataformas y lenguajes.

Aplicaciones de SQLite

Las caractersticas y plataformas previamente mencionadas hacen de SQLite una excelente opcin en diversos casos tales como:

Cuando se requiere una base de datos integrada dentro de una aplicacin. SQLite es una excelente opcin por su facilidad de configuracin. El inconveniente es que no escala a bases de datos demasiado grandes (en el orden de los terabytes).

Para realizar demostracin de aplicaciones que utilizan un RDBMS (Para que utilizar un manejador de BD pesado que ocupa grandes recursos de sistema cuando solo se requiere hacer un demo de una aplicacin?)

Como cache local de un manejador de base de datos empresarial. Esto acelera el tiempo de respuesta y reduce la carga sobre la base de datos central.

Para aplicaciones en dispositivos mviles que manejan una BD local que se sincroniza por batch con una base de datos remota.

Almacenamiento persistente de objetos, configuraciones y preferencias de usuario. Permite fcilmente crear una estructura para almacenar configuraciones de la aplicacin.3.2 Clases de Almacenamiento en base de datos.La mayora de las bases de datos se almacenan en las llamadas memorias secundarias, especialmente discos duros, aunque, en principio, pueden emplearse tambin discos pticos, memorias flash, etc. Las razones por las cuales las bases de datos se almacenan en memorias secundarias son:

* En general, las bases de datos son demasiado grandes para entrar en la memoria primaria.

* La memoria secundaria suele ser ms barata que la memoria primaria (aunque esta ltima tiene mayor velocidad).

* La memoria secundaria es ms til para el almacenamiento de datos permanente, puesto que la memoria primaria es voltil.

En cuanto al respaldo de las bases de datos (ver backup), suelen emplearse tanto discos duros, como cintas magnticas, discos pticos o similares. Tcnicas de almacenamiento y recuperacin de bases de datos Las tcnicas empleadas para almacenar bases de datos son sumamente importantes para la velocidad de acceso y recuperacin de datos. Las tcnicas dependen del tipo de almacenamiento, el uso que se le da o se le dar a la base de datos, la estructura de la misma, el SGBD empleado, etc. Esta dependencia no significa necesariamente que haya que cambiar la estructura de la base de datos si se cambian las tcnicas empleadas. Las tcnicas de almacenamiento son independientes de la base de datos, pero, de todas maneras, las mejores tcnicas muchas veces pueden determinarse viendo la estructura de la base de datos, entre otras caractersticas. Los encargados de elegir estas tcnicas son los diseadores y administradores de bases de datos, y dependen tambin de las capacidades del SGBD. En general, el SGBD ofrece diferentes opciones y tcnicas para organizar los datos. La idea es que los encargados de la base de datos encuentren las tcnicas idneas, o sea, aquellas que permitan la mayor velocidad posible de acceso a los datos. Una mala decisin en este rea puede resultar en una menor velocidad de acceso a la base de datos, o en un uso excesivo del espacio de almacenamiento, o incluso, puede aumentar la velocidad de consulta de una base de datos, pero disminuir la velocidad de actualizacin de la misma. El almacenamiento en archivos de las bases de datos Las bases de datos se almacenan en ficheros o archivos. Existen diferentes formas de organizaciones primarias de archivos que determinan la forma en que los registros de un archivo se coloca fsicamente en el disco y, por lo tanto, cmo se accede a stos. Las distintas formas de organizaciones primarias de archivos son:

* Archivos de montculos (o no ordenados): esta tcnica coloca los registros en el disco sin un orden especfico, aadiendo nuevos registros al final del archivo.

* Archivos ordenados (o secuenciales): mantiene el orden de los registros con respecto a algn valor de algn campo (clave de ordenacin).

* Archivos de direccionamiento calculado: utilizan una funcin de direccionamiento calculado aplicada a un campo especfico para determinar la colocacin de los registros en disco.

* rboles B: se vale de la estructura de rbol para las colocaciones de registros. Existe una segunda forma de acceder a los datos llamada organizacin secundaria o estructura de acceso auxiliar. Estas permiten que los accesos a los registros de un archivo basado en campos alternativos, sean ms eficientes que los que han sido utilizados para la organizacin primaria de archivos.

Conclusiones Personales

En general el curso me gust mucho que aunque en programacin como siempre batallo debo de aprender y ms en el desarrollo de aplicaciones mviles debido a que es actualmente la tecnologa ms usada, entonces aprender a programar para estos dispositivos se ha vuelto indispensable para los ingenieros en sistemas actualmente por que incluso pudieran llegar a ser alguna de las fuentes para obtener recursos si nuestras aplicaciones se llegan a vender, gracias por las enseanzas Ingeniero que de ahora en adelante dudo que me vuelva dar una clase que aunque yo me quedo otro semestre ya no ser mi profesor, le agradezco cada momento de paciencia que me tuvo y cada cosita que aprend con usted es algo que me va a servir en el futuro, le deseo tenga felices fiestas y una buenas vacaciones, me arrepiento de no haber entrado al curso de certificacin pero si el semestre que entra hay oportunidad de que usted lo imparta tenga por seguro que ah estar.4 Referencias

http://sg.com.mx/revista/17/sqlite-la-base-datos-embebida#.VH-ddzGUfg8http://www.alegsa.com.ar/Dic/almacenamiento%20de%20bases%20de%20datos.php30