Upload
others
View
5
Download
0
Embed Size (px)
Citation preview
UNIVERSIDAD DON BOSCO
FACULTAD DE ESTUDIOS TECNOLOGICOS
COORDINACION DE COMPUTACION
Ciclo I
BASE DE DATOS
Guía de Laboratorio No. 7
SQLite
I. RESULTADOS DE APRENDIZAJE
Que el estudiante:
• Aplique el proceso de creación y manejo de datos SQLite, donde aprenderemos a dar
mantenimientos a la tabla desde una aplicación Android
II. INTRODUCCIÓN
SQLITE
SQLite es un sistema de gestión de bases de datos relacional compatible con ACID, contenida en una
relativamente pequeña (~275 kiB)2 biblioteca escrita en C. SQLite es un proyecto de dominio
público creado por D. Richard Hipp.
A diferencia de los sistema de gestión de bases de datos cliente-servidor, el motor de SQLite no es un
proceso independiente con el que el programa principal se comunica. En lugar de eso, la biblioteca
SQLite se enlaza con el programa pasando a ser parte integral del mismo.
SQLITE MANAGER
SQLiteManager es un gestor de bases de datos SQLite, con una interfaz muy clara, dividida en pestañas
para los elementos de diseño, administración y la elaboración de instrucciones SQL, con la posibilidad
de crear y navegar por las tablas, índices y views, insertar, eliminar y editar las tablas, ejecutar
sentencias SQL,etc.
III. MATERIALES Y EQUIPO
No. Requerimientos Cantidad
1 Memoria USB 1
2 PC con MySQL y editor SQLite 1
3 Guía de laboratorio 7 1
IV. PROCEDIMIENTO
Para esta práctica deberá crear un proyecto en Android Studio con el nombre
basededatos
PARTE 1: Clase java para ayudarnos a la creación de base de datos
1. Debemos agregar una nueva clase java con el nombre DBHelper,
siguiendo los siguientes pasos:
2. En la clase DBHelper, debemos hacer que se extendia a la clase SQLiteOpenHelper, que
nos proporciona dos métodos para abrir modo lectura y escritura nuestra Base de datos
que utilizaremos en nuestra aplicación.
package com.example.k2m.basededatos;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
public class DBHelper extends SQLiteOpenHelper {
//Nombre de nuestra base de datos
private static final String DB_NAME="Contactos.sqlite";
/*Version de nuestro esquema de la base de datos que
nos muestra la version de nuestra estructura de la Base de Datos*/
private static final int DB_SCHEME_VERSION=1;
//Nos ayuda para la creación y actualización de nuestras base de datos.
public DBHelper(Context context) {
super(context, DB_NAME, null, DB_SCHEME_VERSION);
}
//En este metodo vamos a crear las tablas de la base de datos
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(DataBaseManager.CREATE_CATEGORIAS);
db.execSQL(DataBaseManager.CREATE_TABLE);
}
//En este metodo vamos a modificar nuestra base de datos.
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
}
}
PARTE 2: Clase java para ayudarnos a la creación y mantenimientos de tablas.
4. Debemos agregar una nueva clase java con el nombre
DataBaseManager, en el cual crearemos los elementos necesarios
para realizar los CRUD(Create, Read,Update,Delete).
package com.example.k2m.basededatos;
import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
public class DataBaseManager {
//TABLA CONTACTOS
public static final String TABLE_NAME="contactos";
//nombre de los campos de la tabla contactos
public static final String CN_ID="_id";
public static final String CN_NAME="nombre";
public static final String CN_PHONE="telefono";
public static final String CN_CATEGORIES="categoria";
//TABLA CATEGORIAS
public static final String TABLE2_NAME="Categorias";
//nombre de los campos de la tabla categorias
public static final String CN_ID2="_id";
public static final String CN_NAME2="nombre";
//sentencia SQL para crear la tabla.
public static final String CREATE_TABLE = "create table " +TABLE_NAME+
"("
+ CN_ID +" integer primary key autoincrement,"
+ CN_NAME +" text not null,"
+ CN_PHONE +" text,"
+ CN_CATEGORIES +" integer,"
+ "FOREIGN KEY("+CN_CATEGORIES+") REFERENCES
"+TABLE2_NAME+"("+CN_ID2+"));";
//CREATE TABLE IF NOT EXISTS Categoria
public static final String CREATE_CATEGORIAS = "create table " +
TABLE2_NAME+"("
+ CN_ID2 +" integer primary key autoincrement,"
+ CN_NAME2 + " text not null);";
//Creacion de objetos
private DBHelper helper;
private SQLiteDatabase db;
//Constructor de la instancia nos servira para ejecutar los demas mantenimientos.
public DataBaseManager(Context context){
helper = new DBHelper(context);
db = helper.getWritableDatabase();
}
//Funcion que devuelve contendor de valores
public ContentValues generarContentValues(String nombre, String Telefono,String
Categoria){
//creación de contenedor de valores.
ContentValues valores= new ContentValues();
valores.put(CN_NAME,nombre);
valores.put(CN_PHONE,Telefono);
valores.put(CN_CATEGORIES,Categoria);
return valores;
}
//insertar datos a contacto
public void insertar(String nombre, String Telefono,String Categorias){
//para insertar necesitamos nombre de tabla, NullColumHack(indica campo que
puede ser nulo
// en la tabla ó escribir null), Contenedor de Valores
db.insert(TABLE_NAME, null, generarContentValues(nombre, Telefono,
Categorias));
//Otra Forma para hacer insert
// db.execSQL("insert into "+TABLE_NAME+"
values(null,'"+nombre+"',"+Telefono+");");
}
//eliminar registro por id
public void eliminar(String id){
//? se sustituye por el id que recibira
db.delete(TABLE_NAME,CN_ID+"=?",new String[]{id});
}
//elimar registros por nombre
public void eliminarmultiple(String nom1, String nom2){
db.delete(TABLE_NAME,CN_ID+" IN (?,?)",new String[]{nom1,nom2});
}
//modificar datos de contacto
public void modificarTelefono(String id,String nombre, String NuevoTelefono, String
Categorias){
db.update(TABLE_NAME, generarContentValues(nombre, NuevoTelefono,
Categorias), CN_ID + "=?", new String[]{id});
}
//Buscar todos los contactos
public Cursor cargarCursorContactos(){
String[] columnas = new String[]{CN_ID,CN_NAME,CN_PHONE};
return db.query(TABLE_NAME,columnas,null,null,null,null,null);
}
//Buscar Contacto por Nombre
public Cursor buscarContacto(String nombre){
String[] columnas = new String[]{CN_ID,CN_NAME,CN_PHONE};
return db.query(TABLE_NAME,columnas,CN_NAME+"=?",new
String[]{nombre},null,null,null);
}
//Buscar Contacto por ID
public Cursor buscarID(String id){
String[] columnas = new
String[]{CN_ID,CN_NAME,CN_PHONE,CN_CATEGORIES};
return db.query(TABLE_NAME,columnas,CN_ID+"=?",new
String[]{id},null,null,null);
}
//Cargar categorias
public Cursor CargarCategorias(){
String[] columnas = new String[]{CN_ID2,CN_NAME2};
return db.query(TABLE2_NAME,columnas,null,null,null,null,null);
}
//Insertar categorias
public void insertarcat(String Nombre){
ContentValues valores= new ContentValues();
valores.put(CN_NAME2,Nombre);
db.insert(TABLE2_NAME, null, valores);
}
}
PARTE 3: Creación de Activity para manejar datos.
5. Deberemos crear lo siguiente en Activity_Main.xml A partir de
la siguiente imagen:
6. Debemos modificar nuestro MainActivity.class, la cual se encargara de
realizar nuestros mantenimientos a la base de datos (insertar, leer,
actualizar y eliminar). package com.example.k2m.basededatos;
import android.app.Activity;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.support.design.widget.FloatingActionButton;
import android.support.design.widget.Snackbar;
import android.support.v7.app.AppCompatActivity;
import android.support.v7.widget.Toolbar;
import android.util.Log;
import android.view.View;
import android.view.Menu;
import android.view.MenuItem;
import android.widget.AdapterView;
import android.widget.Button;
import android.widget.ListView;
import android.widget.SimpleCursorAdapter;
import android.widget.TextView;
import android.widget.Toast;
import java.util.HashMap;
import java.util.Objects;
public class MainActivity extends Activity implements
View.OnClickListener {
private DataBaseManager manager; //Ayuda a manejo de la BD
Cursor cursor; //Extraer datos de TB Contactos
SimpleCursorAdapter adapter; //Adaptador para ingresar datos de
cursor a ListView
private SharedPreferences registro;
private SharedPreferences.Editor admin;
private ListView lista;
private TextView tv;
private Button btn;
private Button btnbuscar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
lista = (ListView) findViewById(R.id.listView);
tv = (TextView) findViewById(R.id.TxtNombre);
//Creando Tablas
manager = new DataBaseManager(this);
cursor = manager.cargarCursorContactos();
//eventos de boton
btn =(Button) findViewById(R.id.button);
btn.setOnClickListener(this);
btnbuscar =(Button) findViewById(R.id.btnagregar);
btnbuscar.setOnClickListener(this);
//Creacion de columnas para cursores
final String[] from=new
String[]{manager.CN_NAME,manager.CN_PHONE};
int[] to = new int[]{android.R.id.text1,android.R.id.text2};
//Mostrar todos los contactos.
adapter = new
SimpleCursorAdapter(this,android.R.layout.two_line_list_item,cursor,fro
m,to,0);
lista.setAdapter(adapter);
//Obteniendo ID de contactos para mostrar informacion.
lista.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view, int
position, long id) {
cursor.moveToPosition(position);
Intent editar = new Intent(MainActivity.this,
EditarActivity.class);
editar.putExtra("idContacto", cursor.getString(0));
startActivity(editar);
finish();
//Toast.makeText(MainActivity.this,
cursor.getString(1),Toast.LENGTH_SHORT).show();
}
});
//Realizar insercion cuando se abra por primera vez la app
registro = getSharedPreferences("Historial",1);
admin = registro.edit();
//verificar si es la primera vez
if(registro.getBoolean("Primera_vez",true)){
//insercion a tabla categorias
manager.insertarcat("Amigos");
manager.insertarcat("Trabajo");
manager.insertarcat("Familia");
admin.putBoolean("Primera_vez",false).commit();
}
}
@Override
//Evento clic de botones
public void onClick(View v) {
if(v.getId()==R.id.button){
//Hacer busqueda de contactos.
final Cursor c= manager.buscarContacto(tv.getText().toString());
adapter.changeCursor(c);
lista.setOnItemClickListener(new
AdapterView.OnItemClickListener() {
@Override
public void onItemClick(AdapterView<?> parent, View view,
int position, long id) {
c.moveToPosition(position);
Intent editar = new Intent(MainActivity.this,
EditarActivity.class);
editar.putExtra("idContacto", c.getString(0));
startActivity(editar);
finish();
}
});
}
if(v.getId()==R.id.btnagregar){
Intent otro = new Intent(this,Main2Activity.class);
startActivity(otro);
finish();
}
}
}
7. Deberemos crear lo siguiente en Activity2_Main.xml A partir
de la siguiente imagen:
8. Debemos modificar nuestro Main2Activity.class, la cual se encargara de
realizar nuestros mantenimientos a la base de datos (insertar, leer,
actualizar y eliminar). package com.example.k2m.basededatos;
import android.content.Intent;
import android.database.Cursor;
import android.media.Image;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.ArrayAdapter;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class Main2Activity extends AppCompatActivity implements
View.OnClickListener {
private DataBaseManager manager;
private EditText txtnombre;
private EditText txttelefono;
private Button btnguardar;
private Spinner spncategorias;
SimpleCursorAdapter acategorias;
Cursor ccategorias;
private Integer posicion;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
manager = new DataBaseManager(this);
txttelefono= (EditText) findViewById(R.id.txtNtelefono);
txtnombre = (EditText) findViewById(R.id.txtNContacto);
spncategorias = (Spinner) findViewById(R.id.cmbcategorias);
btnguardar = (Button) findViewById(R.id.btnguardar);
btnguardar.setOnClickListener(this);
final String[] from=new String[]{manager.CN_NAME2};
int[] to = new int[]{android.R.id.text1};
ccategorias = manager.CargarCategorias();
acategorias = new
SimpleCursorAdapter(this,android.R.layout.simple_spinner_dropdown_it
em,ccategorias,from,to,0);
spncategorias.setAdapter(acategorias);
ImageView avatar = (ImageView) findViewById(R.id.img);
avatar.setImageResource(R.drawable.contacto);
}
@Override
public void onClick(View v) {
if(v.getId()== R.id.btnguardar){
posicion = spncategorias.getSelectedItemPosition();
ccategorias.moveToPosition(posicion);
// Toast.makeText(Main2Activity.this, ccategorias.getString(0),
Toast.LENGTH_SHORT).show();
manager.insertar(txtnombre.getText().toString(),txttelefono.getText().toSt
ring(),ccategorias.getString(0));
txtnombre.setText("");
txttelefono.setText("");
Intent refresh= new Intent(this,MainActivity.class);
startActivity(refresh);
finish();
}
}
}
9. Deberemos crear lo siguiente en Activity_editar.xml A partir
de la siguiente imagen:
4. Debemos modificar nuestro EditarActivity.class, la cual se
encargara de realizar nuestros mantenimientos a la base de
datos (insertar, leer, actualizar y eliminar). package com.example.k2m.basededatos;
import android.content.Intent;
import android.database.Cursor;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.webkit.WebView;
import android.widget.Button;
import android.widget.EditText;
import android.widget.ImageView;
import android.widget.SimpleCursorAdapter;
import android.widget.Spinner;
import android.widget.Toast;
public class EditarActivity extends AppCompatActivity implements
View.OnClickListener {
private DataBaseManager manager;
Cursor cursor;
private String parametro;
private EditText txtnombre;
private EditText txttelefono;
private Spinner spncategorias;
SimpleCursorAdapter acategorias;
Cursor ccategorias;
private Integer posicion;
private Button btnactualizar;
private Button btnEliminar;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_editar);
manager = new DataBaseManager(this);
Intent param = getIntent();
parametro=param.getStringExtra("idContacto");
// Toast.makeText(this, parametro, Toast.LENGTH_SHORT).show();
cursor = manager.buscarID(parametro);
cursor.moveToPosition(0);
txttelefono= (EditText) findViewById(R.id.txtNtelefono);
txtnombre = (EditText) findViewById(R.id.txtNContacto);
spncategorias = (Spinner) findViewById(R.id.cmbcategorias);
btnactualizar = (Button) findViewById(R.id.btnactualizar);
btnactualizar.setOnClickListener(this);
txtnombre.setText(cursor.getString(1));
txttelefono.setText(cursor.getString(2));
posicion = Integer.parseInt(cursor.getString(3));
final String[] from=new String[]{manager.CN_NAME2};
int[] to = new int[]{android.R.id.text1};
ImageView avatar = (ImageView) findViewById(R.id.img);
switch (posicion){
case 1:
avatar.setImageResource(R.drawable.amigos);
break;
case 2:
avatar.setImageResource(R.drawable.trabajo);
break;
case 3:
avatar.setImageResource(R.drawable.familia);
break;
default:
avatar.setImageResource(R.drawable.contacto);
}
ccategorias = manager.CargarCategorias();
acategorias = new
SimpleCursorAdapter(this,android.R.layout.simple_spinner_dropdown_it
em,ccategorias,from,to,0);
spncategorias.setAdapter(acategorias);
//Posiciona spinner en id de categoria guardad en base de datos
spncategorias.setSelection(posicion-1);
btnEliminar=(Button) findViewById(R.id.btnEliminar);
btnEliminar.setOnClickListener(this);
}
@Override
public void onClick(View v) {
if(v.getId()== R.id.btnactualizar){
posicion = spncategorias.getSelectedItemPosition();
ccategorias.moveToPosition(posicion);
manager.modificarTelefono(parametro,
txtnombre.getText().toString(), txttelefono.getText().toString(),
ccategorias.getString(0));
txtnombre.setText("");
txttelefono.setText("");
Intent refresh= new Intent(this,MainActivity.class);
startActivity(refresh);
finish();
}
if(v.getId()== R.id.btnEliminar){
manager.eliminar(parametro);
txtnombre.setText("");
txttelefono.setText("");
Intent refresh= new Intent(this,MainActivity.class);
startActivity(refresh);
finish();
}
}
}
5. Vamos a ejecutar nuestra aplicación dando clic en Run
6. Cuando nuestra aplicación se cargue en el emulador podemos revisar si,
se nos ha creado nuestra base de datos, procediendo a dar clic en
Android Device Monitor ahí daremos clic en File Explorer, luego
ubicaremos nuestra carpeta data y dentro de ella nuestro paquete con el
nombre de la aplicación.
PARTE 4: SQLite Manager
10. Haremos una copia de nuestra base de datos sqlite, en nuestra máquina para
poder monitorear los cambios en ella. Para ello haremos daremos clic en Guardar
archivo en destino.
11. En el cuadro de dialogo deberemos seleccionar la ubicación (Escritorio de
Windows) y poner el nombre al archivo con extensión .sqlite.
12. Ahora que tenemos una copia de nuestra base de datos, podemos abrirlo desde
SqliteManager, Abrimos nuestro navegador Firefox y abrimos la extensión
SQLiteManager para poder conectarnos a nuestra copia.
13. En el siguiente cuadro seleccionamos la ubicación de nuestro archivo.
14. Ahora ya tenemos la conexión a nuestra copia de BD Contactos, ya podemos ver
su tabla y trabajar en ellas haciendo select, insert, update y delete.
V. BIBLIOGRAFÍA
http://www.hermosaprogramacion.com/2016/01/base-de-datos-sqlite-en-android-con-
multiples-tablas/
HOJA DE EVALUACIÓN
Actividad a
evaluar
Criterio a evaluar Cumplió Puntaje
SI NO
Procedimiento
de guías
Realizo los ejercicios de ejemplos durante la
práctica. (40%)
Presento todos los problemas resueltos. (20%)
Funcionan todos correctamente y sin errores.
(30%)
Envió los ejercicios en una carpeta
comprimida de acuerdo en el tiempo
estipulado por el docente. (10%)
PROMEDIO:
Ejercicio
Complementar
io
Realizó el análisis de resultados durante la
guía de práctica (40%)
Presentó todos los problemas resueltos (20%)
Funcionan todos correctamente y sin errores
(30%)
Envió los ejercicios en una carpeta
comprimida de acuerdo en el tiempo
estipulado por el docente (10%)
PROMEDIO:
Alumno: Carnet:
Docente: Fecha:
Título de la guía: SQLite No.: Guía 6