La base de datos que crearemos no tendra mucha dificultad, solo contendrá una sola tabla llamada Alumno, pongo la sintaxis en SQL:
CREATE TABLE Alumno (Codigo INTEGER PRIMARY KEY,
Nombre TEXT NOT NULL,
Telefono TEXT NOT NULL,
Carrera TEXT NOT NULL);
Primero crearemos una clase llamada AlmacenBase.java
AlmacenBase.java
package com.example.ultron.practicabasedatos; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteOpenHelper; import java.util.Vector; /** * Created by ultron on 13/07/15. */ public class AlmacenBase extends SQLiteOpenHelper { public AlmacenBase(Context context) { super(context,"AlumnosPro",null,1); /* Se manda al constructor de la clase padre para genera un entorno lógico de tu base de datos. Parametros: Contexto: Contexto de la aplicación Nombre de la base de datos Si se tiene un cursor que se puede utilizar como guia o referencia el objeto es cursorFactory, si no lo hay, null Número de versión */ } @Override public void onCreate(SQLiteDatabase db) { db.execSQL("CREATE TABLE Alumno (Codigo INTEGER PRIMARY KEY,Nombre TEXT NOT NULL, Telefono TEXT NOT NULL, Carrera TEXT);"); /* Se sobreescribe el metodo onCreate de la clase padre esto con la intención de tener una estructura lógica de la base, en memoria ya se creo, pero aun no esta almacenada en el teléfono. */ } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //Control de versiones de la base de datos } }
Ahora crearemos la clase DataBaseManager.java que servirá como ayudante en el manejo de la base de datos.
DataBaseManager.java
package com.example.ultron.practicabasedatos; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.sqlite.SQLiteDatabase; import java.io.File; /** * Created by ultron on 13/07/15. */ public class DataBaseManager { //****Clase para administrar la base de datos con la que trabajaremos****// /* Tablas de la base de datos: CREATE TABLE Alumno (Codigo INTEGER PRIMARY KEY, Nombre TEXT NOT NULL, Telefono TEXT NOT NULL, Carrera TEXT NOT NULL); */ String nombre="Nombre",telefono="Telefono",carrera="Carrera",codigo="Codigo";//Variables que serviran como referencias a los atributos de la tabla Alumnos AlmacenBase helper; //Clase que realiza la conexion SQLiteDatabase db; //Objeto que nos sirve como enlace lógico con la base de datos public DataBaseManager(Context context) { helper=new AlmacenBase(context); //Se crea el objeto de conexion db=helper.getWritableDatabase();//Si no existe la base se crea y si existe se habre en modo escritura } public ContentValues generaContenedorAlumno(int codigoP,String nombreP,String telefonoP,String carreraP) { /* Contenedor que genera un diccionario para los atributos a ingresar a la base de datos Un diccionario solo son tublas de elementos con algun significado, en este caso lo estructuramos con los parametros que recibimos. */ ContentValues valores=new ContentValues(); valores.put(codigo,Integer.toString(codigoP)); valores.put(nombre,nombreP); valores.put(telefono,telefonoP); valores.put(carrera,carreraP); return valores; } public void insertar(int codigoP,String nombreP,String telefonoP,String carreraP) { /* La inserción de registros a la tabla se realiza con un metodo ya establecido de la clase SQLiteDatabase llamado insert, es conveniente y recomendable hacerlo por su facilidad de uso sus parametros: Tabla:El nombre de la tabla en la que se realizara la inserción. nullColumnHack: El nombre de la o las columnas donde se recibiran valores null, si no los hay, mandar null. valores: Los valores, mapeados en un ContentValue para su simplicidad El método retornara el ID de la ultima fila insertada se se realizo con exito, de lo contrario retornara -1 */ //TABLADestino null ContentValues db.insert("Alumno", null, generaContenedorAlumno(codigoP, nombreP, telefonoP, carreraP)); } public void eliminar(int codigoP) { /* Metodo establecido de SQLiteDatabase para eliminar registros: Parametros: Tabla: La tabla afectada Clausula Where: Campo =? ---->WHERE Campo= Argumentos del Where: Como pueden ser varios se utiliza un arreglo de Strings */ //TABLADESTINOdb.delete("Alumno", codigo + "=?", new String[]{Integer.toString(codigoP)}); } public void actualiza(int codigoP,String nombreP,String telefonoP,String carreraP) { /* Método para actualizar las filas, recibe como parametros: Tabla: Tabla afectada. Valores: ContentValue con la lista de los valores de la tabla, junto los no actualizados, como si se realisase una insercion. Clausula Where: Campo =? ---->WHERE Campo= Argumentos del Where:Como pueden ser varios se utiliza un arreglo de Strings Retornara el numero de filas afectadas. */ //TABLADESTINO db.update("Alumno", generaContenedorAlumno(codigoP, nombreP, telefonoP, carreraP), codigo + "=?", new String[]{Integer.toString(codigoP)}); } public Cursor buscar(int codigoP) { /* Este método retornara un Cursor con el resultado de la consulta, los parametros son: Tabla: Nombre de la tabla afectada. Columns: La lista de las columnas requeridas en un arreglo de Strings Selección o condición: Columna =? -----> WHERE Columna= Argumentos de la condición: Arreglo de Strings de los campos a usar como referencia groupBy having orderBy limit */ /*****Un Cursor es un contenedor de resultados random para resultados de Querys en SQL*****/ //TABLABUSQUEDA DATOS_REQUERIDOS String[] columnas=new String[]{codigo,nombre,telefono,carrera}; return db.query("Alumno",columnas,codigo + "=?",new String[]{Integer.toString(codigoP)},null,null,null,null); } public void EliminarBase() { /* Para eliminar la base de datos se tiene que hacer un enlace lógico con el directorio de la base para eso se pide el directorio con getPath. directorio es el enlace lógico. deleteDatabase eliminara la base si directorio es diferente de null. Retornara true si se concreto la operación, false en caso contrario. */ final String path=db.getPath(); File directorio=new File(path); db.deleteDatabase(directorio); } }
Terminada la creación de estas bases de datos que son esenciales para el funcionamiento de nuestra app, lo siguiente es crear la primera actividad llamada "Agregar.java". Esta actividad servira para agregar registros a nuestra base.
Agregar.java
package com.example.ultron.practicabasedatos; import android.media.MediaDescription; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; public class Agregar extends ActionBarActivity { AlmacenBase Base; EditText nombreTxt,telefonoTxt,CarreraTxt,CodigoTxt; Button agregarBtn; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_agregar); //Referencias al layout nombreTxt=(EditText)findViewById(R.id.NombreTxt); telefonoTxt=(EditText)findViewById(R.id.TelefonoTxt); CarreraTxt=(EditText)findViewById(R.id.CarreraTxt); CodigoTxt=(EditText)findViewById(R.id.CodigoTxt); agregarBtn=(Button)findViewById(R.id.AgregarAlumnoBtn); agregarBtn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DataBaseManager dbm=new DataBaseManager(getApplicationContext());//Manager de la base de datos String nombre=nombreTxt.getText().toString(); String telefono=telefonoTxt.getText().toString(); String codigo=CodigoTxt.getText().toString(); String carrera=CarreraTxt.getText().toString(); int CodigoEnt=Integer.parseInt(codigo); dbm.insertar(CodigoEnt,nombre,telefono,carrera);//Insercion en la base de datos nombreTxt.setText(""); telefonoTxt.setText(""); CodigoTxt.setText(""); CarreraTxt.setText(""); //Limpiamos formulario } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_agregar, 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(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
Ahora nos dirigimos al layout, al activity_agregar.xml por cuestiones de espacio no subiré los xml de la aplicación puedes descargarlos de este link para que te des una idea de como sera diseñada la aplicación.
Ahora crearemos la activity Buscar.java
Buscar.java
package com.example.ultron.practicabasedatos; import android.database.Cursor; import android.provider.ContactsContract; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; import android.widget.TextView; import org.w3c.dom.Text; import java.util.StringTokenizer; public class Buscar extends ActionBarActivity { AlmacenBase Base; Button buscar; int Codigo; EditText CajaCodigo; TextView nombreTV,telefonoTV,carreraTV; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_buscar); //Referencias al layout buscar=(Button)findViewById(R.id.BuscarBtn); CajaCodigo=(EditText)findViewById(R.id.CodigoTxt); telefonoTV=(TextView)findViewById(R.id.MuestraTelefonolbl); nombreTV=(TextView)findViewById(R.id.MuestraNombreLbl); carreraTV=(TextView)findViewById(R.id.MuestraCarreraLbl); buscar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DataBaseManager dbm=new DataBaseManager(getApplicationContext());//Manager para la base de datos Codigo=Integer.parseInt(CajaCodigo.getText().toString());//Se obtiene el codigo Cursor res=dbm.buscar(Codigo);//Buscamos resultados if(res!=null) { //Mostramos resultados de la query res.moveToNext(); nombreTV.setText(""); nombreTV.setText(res.getString(1).toString()); telefonoTV.setText(""); telefonoTV.setText(res.getString(2).toString()); carreraTV.setText(""); carreraTV.setText(res.getString(3).toString()); } } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_buscar, 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(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }En seguida creamos la activity Modificar.java
Modificar.java
package com.example.ultron.practicabasedatos; import android.database.Cursor; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; public class Modificar extends ActionBarActivity { Button buscar,actualizar; int Codigo; EditText nombreTxt,telefonoTxt,carreraTxt,codigoTxt; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_modificar); nombreTxt=(EditText)findViewById(R.id.NombreModTxt); telefonoTxt=(EditText)findViewById(R.id.TelefonoModTxt); carreraTxt=(EditText)findViewById(R.id.CarreraModTxt); buscar=(Button)findViewById(R.id.BuscarBtn); actualizar=(Button)findViewById(R.id.ActualizarBtn); codigoTxt=(EditText)findViewById(R.id.CodigoModTxt); buscar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DataBaseManager dbm=new DataBaseManager(getApplicationContext()); Codigo=Integer.parseInt(codigoTxt.getText().toString()); Cursor res=dbm.buscar(Codigo); if(res!=null) { res.moveToNext(); nombreTxt.setText(""); nombreTxt.setText(res.getString(1).toString()); telefonoTxt.setText(""); telefonoTxt.setText(res.getString(2).toString()); carreraTxt.setText(""); carreraTxt.setText(res.getString(3).toString()); } } }); actualizar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DataBaseManager dbm=new DataBaseManager(getApplicationContext()); int codigo=Integer.parseInt(codigoTxt.getText().toString()); String nombre=nombreTxt.getText().toString(); String telefono=telefonoTxt.getText().toString(); String carrera=carreraTxt.getText().toString(); dbm.actualiza(codigo,nombre,telefono,carrera); nombreTxt.setText(""); telefonoTxt.setText(""); carreraTxt.setText(""); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_modificar, 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(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }Ya casi para terminar el Eliminar.java
Eliminar.java
package com.example.ultron.practicabasedatos; import android.database.Cursor; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; import android.widget.EditText; public class Eliminar extends ActionBarActivity { EditText nombreTxt,telefonoTxt,carreraTxt,codigoTxt; Button buscar,eliminar; int Codigo=0; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_eliminar); /* Referenciamos los elementos del Layout con la clase de java */ nombreTxt=(EditText)findViewById(R.id.NombreElTxt); telefonoTxt=(EditText)findViewById(R.id.TelefonoElTxt); carreraTxt=(EditText)findViewById(R.id.CarreraElTxt); buscar=(Button)findViewById(R.id.BuscarElBtn); eliminar=(Button)findViewById(R.id.EliminarElBtn); codigoTxt=(EditText)findViewById(R.id.CodigoElTxt); /* Primero hay que buscar el elemento que se desea eliminar. */ buscar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DataBaseManager dbm = new DataBaseManager(getApplicationContext());//Se invoca a la clase que nos guia a travez de la base de datos Codigo = Integer.parseInt(codigoTxt.getText().toString());//Obtenemos el codigo Cursor res = dbm.buscar(Codigo);//Buscamos el elemento segun el codigo ingresado if (res != null) { //Mostramos resultados res.moveToNext(); nombreTxt.setText(""); nombreTxt.setText(res.getString(1).toString()); telefonoTxt.setText(""); telefonoTxt.setText(res.getString(2).toString()); carreraTxt.setText(""); carreraTxt.setText(res.getString(3).toString()); } } }); eliminar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { DataBaseManager dbm = new DataBaseManager(getApplicationContext());//Se declara el manager de la base de datos dbm.eliminar(Codigo);//Eliminamos usando el codigo como parametro } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.menu_eliminar, 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(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }Por ultimo nos vamos a nuestro MainActivity.java
MainActivity.java
package com.example.ultron.practicabasedatos; import android.content.Intent; import android.database.sqlite.SQLiteDatabase; import android.support.v7.app.ActionBarActivity; import android.os.Bundle; import android.view.Menu; import android.view.MenuItem; import android.view.View; import android.widget.Button; public class MainActivity extends ActionBarActivity { Button agregar,buscar,modificar,eliminar; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); DataBaseManager dbm=new DataBaseManager(this); agregar=(Button)findViewById(R.id.AgregarBtn); buscar=(Button)findViewById(R.id.BuscarBtn); modificar=(Button)findViewById(R.id.ModificarBtn); eliminar=(Button)findViewById(R.id.EliminarBtn); agregar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this, Agregar.class); startActivity(i); } }); buscar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this, Buscar.class); startActivity(i); } }); modificar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this, Modificar.class); startActivity(i); } }); eliminar.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { Intent i = new Intent(MainActivity.this, Eliminar.class); startActivity(i); } }); } @Override public boolean onCreateOptionsMenu(Menu menu) { // Inflate the menu; this adds items to the action bar if it is present. getMenuInflater().inflate(R.menu.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(); //noinspection SimplifiableIfStatement if (id == R.id.action_settings) { return true; } return super.onOptionsItemSelected(item); } }
Ahora en nuestro AndroidManifest.xml agregamos el permiso de escritura y lectura en almacenamiento externo.
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />Y nuestra aplicación se tiene que ver así:
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
No hay comentarios:
Publicar un comentario