domingo, 30 de noviembre de 2014

Proyecto fin de curso Encuesta Android


Bueno para mis alumnos como saben nos encontramos en la etapa final de nuestro curso de android, motivo por el cual les colaboro con la clase helper del proyecto para acelerar los tiempos.
Recordar que nuestro modelo de SQL server del lado servicio es
image
Este es el código de nuestra clase helper del proyecto que tiene comentado el script de generación de la base de datos sqlite por si quieren correrlo en alguna herramienta local en sus maquinas.
Los servicios de la aplicación estarán publicados de manera indeterminada en mi sitio por lo que podrán practicar con los mismos de manera indeterminada.
package curso.edu.encuestadroid.helper.dao;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteDatabase.CursorFactory;
import android.database.sqlite.SQLiteOpenHelper;

/*
         
          CREATE TABLE Encuestas (
          Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
          IdEncuesta INTEGER NOT NULL,
          Numero TEXT NOT NULL,
          Estado BOOL NOT NULL DEFAULT True
          );         
         
          CREATE TABLE Preguntas (
          Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
          IdPregunta INTEGER NOT NULL,
          IdEncuesta INTEGER NOT NULL,
          Detalle TEXT,
          FOREIGN KEY(IdEncuesta) REFERENCES Encuestas(IdEncuesta) 
          );
         
          CREATE TABLE Respuestas (
          Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
          IdRespuesta INTEGER NOT NULL,
          IdEncuesta INTEGER NOT NULL,
          IdPregunta INTEGER NOT NULL,
          Detalle TEXT,
          FOREIGN KEY(IdEncuesta) REFERENCES Encuestas(IdEncuesta),
          FOREIGN KEY(IdPregunta) REFERENCES Preguntas(IdPregunta)
          );
          CREATE TABLE Fichas (
          IdFicha INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
          Numero TEXT NOT NULL,
          Fecha DATETIME NOT NULL,
          IdEncuesta INTEGER NOT NULL,
          IdEncuestado INTEGER NOT NULL,
          FOREIGN KEY(IdEncuesta)  REFERENCES Encuestas(IdEncuesta),
          FOREIGN KEY(IdEncuestado) REFERENCES Encuestados(IdEncuestado) 
          );
          CREATE TABLE FichaDetalle (
          IdFichaDetalle INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,
          IdFicha INTEGER NOT NULL,
          IdEncuesta INTEGER NOT NULL,
          IdPregunta INTEGER NOT NULL,
          IdRespuesta INTEGER NOT NULL,
          FOREIGN KEY(IdFicha) REFERENCES Fichas(IdFicha),
          FOREIGN KEY(IdEncuesta) REFERENCES Encuestas(IdEncuesta),
          FOREIGN KEY(IdPregunta) REFERENCES Preguntas(IdPregunta),
          FOREIGN KEY(IdRespuesta) REFERENCES Respuestas(IdRespuesta));

*/

public class DatabaseHelper extends SQLiteOpenHelper {
    // Logcat tag
    private static final String LOG = "encuestaandroid";

    // Database Version
    private static final int DATABASE_VERSION = 1;

    // Database Name
    private static final String DATABASE_NAME = "encuestaAndroid";

    // Table Names
    private static final String TABLE_ENCUESTAS = "encuestas";
    private static final String TABLE_PREGUNTAS = "preguntas";
    private static final String TABLE_RESPUESTAS = "respuestas";
    private static final String TABLE_FICHAS = "fichas";
    private static final String TABLE_FICHADETALLE = "fichadetalle";
   
    private static final String CREATE_TABLE_ENCUESTAS = "CREATE TABLE Encuestas ("
                                                          + "Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
                                                          + "IdEncuesta INTEGER NOT NULL,"
                                                          + "Numero TEXT NOT NULL,"
                                                          + "Estado BOOL NOT NULL DEFAULT True"
                                                          + ")";
    private static final String CREATE_TABLE_PREGUNTAS ="CREATE TABLE Preguntas ("
                                                          + "Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
                                                          + "IdPregunta INTEGER NOT NULL,"
                                                          + "IdEncuesta INTEGER NOT NULL,"
                                                          + "Detalle TEXT,"
                                                          + "FOREIGN KEY(IdEncuesta) REFERENCES Encuestas(IdEncuesta)" 
                                                          + ")";
    private static final String CREATE_TABLE_RESPUESTAS = "CREATE TABLE Respuestas ("
                                                          + "Id INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
                                                          + "IdRespuesta INTEGER NOT NULL,"
                                                          + "IdEncuesta INTEGER NOT NULL,"
                                                          + "IdPregunta INTEGER NOT NULL,"
                                                          + "Detalle TEXT,"
                                                          + "FOREIGN KEY(IdEncuesta) REFERENCES Encuestas(IdEncuesta),"
                                                          + "FOREIGN KEY(IdPregunta) REFERENCES Preguntas(IdPregunta)"
                                                          + ")";
    private static final String CREATE_TABLE_FICHAS = "CREATE TABLE Fichas ("
                                                          + "IdFicha INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
                                                          + "Numero TEXT NOT NULL,"
                                                          + "Fecha DATETIME NOT NULL,"
                                                          + "IdEncuesta INTEGER NOT NULL,"
                                                          + "IdEncuestado INTEGER NOT NULL,"
                                                          + "FOREIGN KEY(IdEncuesta)  REFERENCES Encuestas(IdEncuesta),"
                                                          + "FOREIGN KEY(IdEncuestado) REFERENCES Encuestados(IdEncuestado)" 
                                                          + ")";
   
    private static final String CREATE_TABLE_FICHADETALLE = "CREATE TABLE FichaDetalle ("
                                                          + "IdFichaDetalle INTEGER NOT NULL PRIMARY KEY AUTOINCREMENT,"
                                                          + "IdFicha INTEGER NOT NULL,"
                                                          + "IdEncuesta INTEGER NOT NULL,"
                                                          + "IdPregunta INTEGER NOT NULL,"
                                                          + "IdRespuesta INTEGER NOT NULL,"
                                                          + "FOREIGN KEY(IdFicha) REFERENCES Fichas(IdFicha),"
                                                          + "FOREIGN KEY(IdEncuesta) REFERENCES Encuestas(IdEncuesta),"
                                                          + "FOREIGN KEY(IdPregunta) REFERENCES Preguntas(IdPregunta),"
                                                          + "FOREIGN KEY(IdRespuesta) REFERENCES Respuestas(IdRespuesta))";
   
    public DatabaseHelper(Context context) {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
    }
    @Override
    public void onCreate(SQLiteDatabase db) {
        db.execSQL(CREATE_TABLE_ENCUESTAS);
        db.execSQL(CREATE_TABLE_PREGUNTAS);
        db.execSQL(CREATE_TABLE_RESPUESTAS);
        db.execSQL(CREATE_TABLE_FICHAS);
        db.execSQL(CREATE_TABLE_FICHADETALLE);
    }
    @Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
       
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_ENCUESTAS);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_PREGUNTAS);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_RESPUESTAS);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_FICHAS);
        db.execSQL("DROP TABLE IF EXISTS " + TABLE_FICHADETALLE);
      
        onCreate(db);
    }
}