Sunteți pe pagina 1din 5

1 PROYECTO CONTROL LABORATORIOS APLICACIONES MOBILES CON ANDROID

Proyecto laboratorio

Creamos nuestra bd en SQLite y luego en la carpeta src creamos un paquete nuevo para la
clase de la bd

Procedemos a crear la clase MySqliteHelper:


package com.example.laboratorios.db;

import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

public class MySqliteHelper extends SQLiteOpenHelper {

public MySqliteHelper(Context context, String dbname, CursorFactory


factory, int version){
super (context, dbname, factory, version);
}

public void onCreate(SQLiteDatabase db){

}
public void onUpgrade(SQLiteDatabase db, int versionAnterior, int
versionNueva){

}
public void createAnemptyDB(){
this.getReadableDatabase();
}

Ahora creamos otra clase de nombre MyDBTool.java para verificar si existe la


clase en nuestros archivos de la aplicacin

package com.example.laboratorios.db;

import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;

import android.content.Context;
import android.util.Log;

public class MyDBTool {

//metodo para verificar la base de datos


public static boolean checkDatabase(String dbpath){
SQLiteDatabase checkDB=null;
try{
Log.i("DB path",dbpath);
checkDB =SQLiteDatabase.openDatabase(dbpath, null,
SQLiteDatabase.OPEN_READONLY);
checkDB.close();
}catch(SQLiteException e){

JCVB 1
2 PROYECTO CONTROL LABORATORIOS APLICACIONES MOBILES CON ANDROID

}
return checkDB != null ? true:false;
}

//metodo para si existe el archivo en la ruta data


public static boolean existFileInAssetFolder(Context context,
String file){
boolean bAssetOk=false;
try{
InputStream stream=context.getAssets().open(file);
stream.close();
bAssetOk=true;
}catch(FileNotFoundException e){
Log.w("IOUtilities","assetExist failed: " + e.toString());
}catch(IOException e){
Log.w("IOUtilities","assetExist failed: " + e.toString());
}
return bAssetOk;
}

public static void copyDatabaseFromAssetesFolder(Context


context, String inputfilename, String outputfilename){
try{
InputStream myinput=context.getAssets().open(inputfilename);
OutputStream myoutput= new FileOutputStream(outputfilename);
byte [] buffer =new byte[1024];
int length;
while((length =myinput.read(buffer))>0){
myoutput.write(buffer,0,length);
}
myoutput.flush();
myoutput.close();
myinput.close();
}catch(IOException e){
Log.e("Error","Copy fail"+e.toString());
}

3.- Creamos la clase MyProvider para establecer un content Provider


package com.example.laboratorios.db;

import android.content.ContentProvider;
import android.content.ContentValues;
import android.content.UriMatcher;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.net.Uri;
import android.provider.BaseColumns;
import android.util.Log;

public class MyProvider extends ContentProvider {


//nombre del paquete principal
private static final String PACKAGE_NAME="com.example.laboratorios";

JCVB 2
3 PROYECTO CONTROL LABORATORIOS APLICACIONES MOBILES CON ANDROID

//variables con el nombre de las tablas


private static final String TABLE_LABORATORIO="laboratorio";
private static final String TABLE_ESTADO="estado";
private static final String TABLE_LABENUSO="labenuso";
private static final String TABLE_TIEMPOENUSO="tiempoenuso";
//dEFINICION DEL CONTENT URI
private static final String
uri_table_laboratorio="content://"+PACKAGE_NAME+"/"+ TABLE_LABORATORIO;
private static final String
uri_table_estado="content://"+PACKAGE_NAME+"/"+ TABLE_ESTADO;
private static final String
uri_table_labenuso="content://"+PACKAGE_NAME+"/"+ TABLE_LABENUSO;
private static final String
uri_table_tiempoenuso="content://"+PACKAGE_NAME+"/"+ TABLE_TIEMPOENUSO;
//Declaracion de los objetos Uris
public static final Uri CONTENT_URI_TABLE_LABORATORIO=
Uri.parse(uri_table_laboratorio);
public static final Uri CONTENT_URI_TABLE_ESTADO=
Uri.parse(uri_table_estado);
public static final Uri CONTENT_URI_TABLE_LABENUSO=
Uri.parse(uri_table_labenuso);
public static final Uri CONTENT_URI_TABLE_TIEMPOENUSO=
Uri.parse(uri_table_tiempoenuso);

//Clase interna para declarar las constantes de cada columna


public static final class LabBaseColumns implements BaseColumns {
private LabBaseColumns() { }

// Nombres de columnas
//public static final String COL_IDLABORATORIO =
"idlaboratorio";
public static final String COL_NOMBRELABORATORIO =
"nombrelaboratorio";
public static final String COL_DESCRIPCIONLABORATORIO =
"descripcionlaboratorio";
}
public static final class EstadoBaseColumns implements BaseColumns {
private EstadoBaseColumns() { }

// Nombres de columnas
public static final String COL_NOMBREESTADO = "nombreestado";
public static final String COL_DESCRIPCIONESTADO =
"descripcionestado";
}
public static final class LabEnUsoBaseColumns implements BaseColumns {
private LabEnUsoBaseColumns() { }

// Nombres de columnas
public static final String COL_IDLABORATORIO = "idlaboratorio";
}
public static final class TiempoenUsoBaseColumns implements
BaseColumns {
private TiempoenUsoBaseColumns() { }

// Nombres de columnas idlab idestado hora diferencia


public static final String COL_IDLAB = "idlab";
public static final String COL_IDESTADO = "idestado";
public static final String COL_HORA = "hora";
public static final String COL_DIFERENCIA = "diferencia";

JCVB 3
4 PROYECTO CONTROL LABORATORIOS APLICACIONES MOBILES CON ANDROID

//BASE DE DATOS
private MySqliteHelper dbh;
private static final String BD_NAME="lab.db";
private static final int BD_VERSION=1;
//UriMatcher
private static final int LABORATORIO = 1;
private static final int LABORATORIO_ID = 2;
private static final UriMatcher uriMatcher;

//Inicializamos el UriMatcher
static {
uriMatcher = new UriMatcher(UriMatcher.NO_MATCH);
uriMatcher.addURI("PACKAGE_NAME", "TABLE_LABORATORIO",
LABORATORIO);
uriMatcher.addURI("PACKAGE_NAME", "TABLE_LABORATORIO/#",
LABORATORIO_ID);
}

@Override
public boolean onCreate() {
// creamos una instancia de la clase MySqliteHelper y le pasamos
x parametro en nom de la BD y la version
//DB_NAME= lab.db
//para q cree en la carpeta
data/data/com.example.laboratorios/databases/lab.db
dbh = new MySqliteHelper(getContext(), BD_NAME, null, BD_VERSION);
if (MyDBTool.existFileInAssetsFolder(getContext(), BD_NAME)){
//obtenemos el path exista o no la base de datos
String dbInternPath =
getContext().getDatabasePath(BD_NAME).getAbsolutePath();
if(MyDBTool.checkDatabase(dbInternPath)){
Log.i("BD","BD available"+ dbInternPath);
}else{
Log.i("BD","First validation: no Exist" + dbInternPath);
//sino esiste se llama al metodo para crear una Bd vacia
//teniendo asi todo el path en el dispositivo movil
dbh.createAnemptyDB();

MyDBTool.copyDatabaseFromAssetesFolder(getContext(),
BD_NAME, dbInternPath);
if(MyDBTool.checkDatabase(dbInternPath)){
Log.i("BD","Second validation:
Exist"+dbInternPath);

}else{
Log.i("BD","Second validation: NO
Exist"+dbInternPath);
}
}
}else{
Log.i("BD","BD file does not exist on asstes folder");
}

return true;

JCVB 4
5 PROYECTO CONTROL LABORATORIOS APLICACIONES MOBILES CON ANDROID

@Override
public Uri insert(Uri uri, ContentValues values) {
// TODO Auto-generated method stub
return null;
}

@Override
public Cursor query(Uri uri, String[] projection, String selection,
String[] selectionArgs, String sortOrder) {
// TODO Auto-generated method stub
// Si es una consulta a un ID concreto construimos el WHERE
String table= null;
if (uriMatcher.match(uri) == LABORATORIO) {
table=TABLE_LABORATORIO;
}

SQLiteDatabase db = dbh.getWritableDatabase();

Cursor cursor = db.query(table, projection,selection,


selectionArgs,
null, null, sortOrder);

return cursor;
}

@Override
public int update(Uri uri, ContentValues values, String selection,
String[] selectionArgs) {
// TODO Auto-generated method stub
return 0;
}

@Override
public int delete(Uri arg0, String arg1, String[] arg2) {
// TODO Auto-generated method stub
return 0;
}

@Override
public String getType(Uri uri) {
// TODO Auto-generated method stub
return null;
}
}

4.- Ahora en el archivo AndroidManifest.xml declaramos el Provider dentro de la aplicacin


<provider
android:exported="false"
android:name="com.example.laboratorios.db.MyProvider"
android:authorities="com.example.laboratorios"/>

5.-

JCVB 5

S-ar putea să vă placă și