155 lines
6.9 KiB
Java
155 lines
6.9 KiB
Java
package cl.cromer.ubb.attendance;
|
|
|
|
import android.content.Context;
|
|
import android.database.sqlite.SQLiteDatabase;
|
|
import android.database.sqlite.SQLiteOpenHelper;
|
|
import android.os.Build;
|
|
|
|
import cl.cromer.ubb.attendance.DBSchema.*;
|
|
|
|
public class SQLParser extends SQLiteOpenHelper {
|
|
|
|
public SQLParser(Context context) {
|
|
super(context, DATABASE_NAME, null, DATABASE_VERSION);
|
|
}
|
|
|
|
// Configuration
|
|
private static final int DATABASE_VERSION = 1;
|
|
private static final String DATABASE_NAME = "UBBAttendance.db";
|
|
|
|
// Strings to make things easier to change code
|
|
private static final String PRIMARY_TYPE = " INTEGER PRIMARY KEY";
|
|
private static final String TEXT_TYPE = " TEXT";
|
|
private static final String INT_TYPE = " INT";
|
|
private static final String LONG_TYPE = " INTEGER";
|
|
//private static final String FLOAT_TYPE = " REAL";
|
|
private static final String BLOB_TYPE = " BLOB";
|
|
//private static final String UNIQUE = " UNIQUE";
|
|
private static final String COMMA_SEP = ",";
|
|
|
|
// Database queries to create the schema
|
|
private static final String SQL_CREATE_MAJORS = "CREATE TABLE " + DBMajors.TABLE_NAME + " (" +
|
|
DBMajors.COLUMN_ID + PRIMARY_TYPE + COMMA_SEP +
|
|
DBMajors.COLUMN_CODE + INT_TYPE + COMMA_SEP +
|
|
DBMajors.COLUMN_NAME + TEXT_TYPE + ")";
|
|
|
|
private static final String SQL_CREATE_SUBJECTS = "CREATE TABLE " + DBSubjects.TABLE_NAME + " (" +
|
|
DBSubjects.COLUMN_ID + PRIMARY_TYPE + COMMA_SEP +
|
|
DBSubjects.COLUMN_CODE + INT_TYPE + COMMA_SEP +
|
|
DBSubjects.COLUMN_NAME + TEXT_TYPE + COMMA_SEP +
|
|
DBSubjects.COLUMN_MAJOR + TEXT_TYPE + ")";
|
|
|
|
private static final String SQL_CREATE_COURSES = "CREATE TABLE " + DBCourses.TABLE_NAME + " (" +
|
|
DBCourses.COLUMN_ID + PRIMARY_TYPE + COMMA_SEP +
|
|
DBCourses.COLUMN_SUBJECT + INT_TYPE + COMMA_SEP +
|
|
DBCourses.COLUMN_SECTION + INT_TYPE + COMMA_SEP +
|
|
DBCourses.COLUMN_YEAR + INT_TYPE + COMMA_SEP +
|
|
DBCourses.COLUMN_SEMESTER + INT_TYPE + ")";
|
|
|
|
private static final String SQL_CREATE_COURSES_STUDENTS = "CREATE TABLE " + DBCoursesStudents.TABLE_NAME + " (" +
|
|
DBCoursesStudents.COLUMN_ID + PRIMARY_TYPE + COMMA_SEP +
|
|
DBCoursesStudents.COLUMN_COURSE + INT_TYPE + COMMA_SEP +
|
|
DBCoursesStudents.COLUMN_STUDENT + INT_TYPE + ")";
|
|
|
|
private static final String SQL_CREATE_CLASSES = "CREATE TABLE " + DBClasses.TABLE_NAME + " (" +
|
|
DBClasses.COLUMN_ID + PRIMARY_TYPE + COMMA_SEP +
|
|
DBClasses.COLUMN_COURSE + INT_TYPE + COMMA_SEP +
|
|
DBClasses.COLUMN_DATE + LONG_TYPE + ")";
|
|
|
|
private static final String SQL_CREATE_STUDENTS = "CREATE TABLE " + DBStudents.TABLE_NAME + " (" +
|
|
DBStudents.COLUMN_ID + PRIMARY_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_RUN + TEXT_TYPE + COMMA_SEP + // Text type because of the K
|
|
DBStudents.COLUMN_FIRST_NAME + TEXT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_SECOND_NAME + TEXT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_FIRST_LAST_NAME + TEXT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_SECOND_LAST_NAME + TEXT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_FIRST_NAME_NORM + TEXT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_SECOND_NAME_NORM + TEXT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_FIRST_LAST_NAME_NORM + TEXT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_SECOND_LAST_NAME_NORM + TEXT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_MAJOR + INT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_EMAIL + TEXT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_ENROLLED + INT_TYPE + COMMA_SEP +
|
|
DBStudents.COLUMN_PHOTO + BLOB_TYPE + ")";
|
|
|
|
private static final String SQL_CREATE_ATTENDANCE = "CREATE TABLE " + DBAttendance.TABLE_NAME + " (" +
|
|
DBAttendance.COLUMN_ID + PRIMARY_TYPE + COMMA_SEP +
|
|
DBAttendance.COLUMN_CLASS + INT_TYPE + COMMA_SEP +
|
|
DBAttendance.COLUMN_STUDENT + INT_TYPE + COMMA_SEP +
|
|
DBAttendance.COLUMN_ATTENDANCE + INT_TYPE + ")";
|
|
|
|
// Database queries to delete the schema
|
|
private static final String SQL_DELETE_SUBJECTS = "DROP TABLE IF EXISTS " + DBSubjects.TABLE_NAME;
|
|
private static final String SQL_DELETE_COURSES = "DROP TABLE IF EXISTS " + DBCourses.TABLE_NAME;
|
|
private static final String SQL_DELETE_COURSES_STUDENTS = "DROP TABLE IF EXISTS " + DBCoursesStudents.TABLE_NAME;
|
|
private static final String SQL_DELETE_STUDENTS = "DROP TABLE IF EXISTS " + DBStudents.TABLE_NAME;
|
|
private static final String SQL_DELETE_CLASSES = "DROP TABLE IF EXISTS " + DBClasses.TABLE_NAME;
|
|
private static final String SQL_DELETE_ATTENDANCE = "DROP TABLE IF EXISTS " + DBAttendance.TABLE_NAME;
|
|
private static final String SQL_DELETE_MAJORS = "DROP TABLE IF EXISTS " + DBMajors.TABLE_NAME;
|
|
|
|
@Override
|
|
public void onCreate(SQLiteDatabase db) {
|
|
// The database does not exist yet, let's create it.
|
|
db.execSQL(SQL_CREATE_MAJORS);
|
|
db.execSQL(SQL_CREATE_SUBJECTS);
|
|
db.execSQL(SQL_CREATE_COURSES);
|
|
db.execSQL(SQL_CREATE_COURSES_STUDENTS);
|
|
db.execSQL(SQL_CREATE_CLASSES);
|
|
db.execSQL(SQL_CREATE_STUDENTS);
|
|
db.execSQL(SQL_CREATE_ATTENDANCE);
|
|
}
|
|
|
|
@SuppressWarnings("StatementWithEmptyBody")
|
|
@Override
|
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
|
// Upgrades to the database will go here.
|
|
if (oldVersion < 2) {
|
|
// Upgrade from database version 1
|
|
}
|
|
}
|
|
|
|
@Override
|
|
public void onDowngrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
|
// Downgrading is not supported, so let's just delete everything and start from scratch
|
|
deleteDatabase(db);
|
|
onCreate(db);
|
|
}
|
|
|
|
@Override
|
|
public void onOpen(SQLiteDatabase db) {
|
|
// The database has been opened...
|
|
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.HONEYCOMB) {
|
|
// The android version is lower than 3.0 so we need to see if a downgrade is necessary
|
|
if (db.getVersion() < DATABASE_VERSION) {
|
|
// Yup, they are downgrading...
|
|
onDowngrade(db, db.getVersion(), DATABASE_VERSION);
|
|
}
|
|
}
|
|
}
|
|
|
|
public void deleteDatabase(SQLiteDatabase db) {
|
|
db.execSQL(SQL_DELETE_SUBJECTS);
|
|
db.execSQL(SQL_DELETE_COURSES);
|
|
db.execSQL(SQL_DELETE_COURSES_STUDENTS);
|
|
db.execSQL(SQL_DELETE_MAJORS);
|
|
db.execSQL(SQL_DELETE_STUDENTS);
|
|
db.execSQL(SQL_DELETE_CLASSES);
|
|
db.execSQL(SQL_DELETE_ATTENDANCE);
|
|
}
|
|
|
|
public String combineColumnsStrings(String[]... strings) {
|
|
if (strings.length == 0) {
|
|
return "";
|
|
}
|
|
StringBuilder stringBuilder = new StringBuilder();
|
|
for (String[] subStringArray : strings) {
|
|
for (String string : subStringArray) {
|
|
if (stringBuilder.length() != 0) {
|
|
stringBuilder.append(", ");
|
|
}
|
|
stringBuilder.append(string);
|
|
}
|
|
}
|
|
return stringBuilder.toString().trim();
|
|
}
|
|
} |