Feat(DB): DB helpers done
This commit is contained in:
parent
06445e2a9f
commit
b320448a60
@ -0,0 +1,104 @@
|
|||||||
|
package com.example.coen390_assignment2.Controllers;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.example.coen390_assignment2.Models.Access;
|
||||||
|
import com.example.coen390_assignment2.Models.AccessContract;
|
||||||
|
import com.example.coen390_assignment2.Models.AccessType;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class AccessDBHelper extends SQLiteOpenHelper {
|
||||||
|
private static final int DATABASE_VERSION = 1;
|
||||||
|
private Context context = null;
|
||||||
|
|
||||||
|
public AccessDBHelper(@Nullable Context context) {
|
||||||
|
super(context, AccessContract.AccessEntry.DATABASE_NAME, null, DATABASE_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(SQLiteDatabase db) {
|
||||||
|
//Create a table
|
||||||
|
String CREATE_COURSE_TABLE = "CREATE TABLE " + AccessContract.AccessEntry.TABLE_NAME + " (" +
|
||||||
|
AccessContract.AccessEntry.COLUMN_NAME_ACCESS_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
|
||||||
|
AccessContract.AccessEntry.COLUMN_NAME_PROFILE_ID + " INTEGER NOT NULL, " +
|
||||||
|
AccessContract.AccessEntry.COLUMN_NAME_ACCESS_TYPE + " TEXT NOT NULL, " +
|
||||||
|
AccessContract.AccessEntry.COLUMN_NAME_TIMESTAMP + " TEXT NOT NULL);";
|
||||||
|
|
||||||
|
db.execSQL(CREATE_COURSE_TABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
|
//Drop older table
|
||||||
|
db.execSQL("DROP TABLE IF EXISTS " + AccessContract.AccessEntry.DATABASE_NAME);
|
||||||
|
onCreate(db);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long insertAccess(Access access) {
|
||||||
|
long id = -1;
|
||||||
|
SQLiteDatabase db = this.getWritableDatabase();
|
||||||
|
ContentValues contentValues = new ContentValues();
|
||||||
|
|
||||||
|
contentValues.put(AccessContract.AccessEntry.COLUMN_NAME_PROFILE_ID, access.getProfileID());
|
||||||
|
contentValues.put(AccessContract.AccessEntry.COLUMN_NAME_ACCESS_TYPE, access.getAccessType().getStringAccessType());
|
||||||
|
contentValues.put(AccessContract.AccessEntry.COLUMN_NAME_TIMESTAMP, access.getTimestamp().format(DateTimeFormatter.ISO_LOCAL_DATE_TIME));
|
||||||
|
|
||||||
|
try {
|
||||||
|
id = db.insertOrThrow(AccessContract.AccessEntry.TABLE_NAME, null, contentValues);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Toast.makeText(context, "DB insert failed: " + e.getMessage(), Toast.LENGTH_LONG).show();
|
||||||
|
} finally {
|
||||||
|
db.close();
|
||||||
|
}
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<Access> getAccessFromProfileID(long profileID) {
|
||||||
|
List<Access> accessList = new ArrayList<>();
|
||||||
|
|
||||||
|
try (SQLiteDatabase db = this.getReadableDatabase()) {
|
||||||
|
Cursor cursor = null;
|
||||||
|
|
||||||
|
String[] columns = {"AccessId", "ProfileID", "AccessType", "Timestamp"};
|
||||||
|
String selection = "ProfileID = ?";
|
||||||
|
String[] selectionArgs = {String.valueOf(profileID)};
|
||||||
|
String orderBy = "Timestamp";
|
||||||
|
|
||||||
|
cursor = db.query(AccessContract.AccessEntry.TABLE_NAME, columns, selection, selectionArgs, null, null, orderBy);
|
||||||
|
|
||||||
|
if (cursor != null) {
|
||||||
|
if (cursor.moveToFirst()) {
|
||||||
|
do {
|
||||||
|
@SuppressLint("Range") int accessId = cursor.getInt(cursor.getColumnIndex(AccessContract.AccessEntry.COLUMN_NAME_ACCESS_ID));
|
||||||
|
@SuppressLint("Range") int _profileID = cursor.getInt(cursor.getColumnIndex(AccessContract.AccessEntry.COLUMN_NAME_PROFILE_ID));
|
||||||
|
@SuppressLint("Range") String accessType = cursor.getString(cursor.getColumnIndex("AccessType"));
|
||||||
|
@SuppressLint("Range") String timestampStr = cursor.getString(cursor.getColumnIndex("Timestamp"));
|
||||||
|
|
||||||
|
// Parse the timestamp string into a LocalDateTime object
|
||||||
|
LocalDateTime timestamp = LocalDateTime.parse(timestampStr, DateTimeFormatter.ISO_LOCAL_DATE_TIME);
|
||||||
|
|
||||||
|
Access access = new Access(accessId, _profileID, AccessType.matchEnum(accessType), timestamp);
|
||||||
|
accessList.add(access);
|
||||||
|
} while (cursor.moveToNext());
|
||||||
|
}
|
||||||
|
cursor.close();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
Toast.makeText(context, "DB get failed: " + e.getMessage(), Toast.LENGTH_LONG).show();
|
||||||
|
}
|
||||||
|
|
||||||
|
return accessList;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,98 @@
|
|||||||
|
package com.example.coen390_assignment2.Controllers;
|
||||||
|
|
||||||
|
import android.annotation.SuppressLint;
|
||||||
|
import android.content.ContentValues;
|
||||||
|
import android.content.Context;
|
||||||
|
import android.database.Cursor;
|
||||||
|
import android.database.sqlite.SQLiteDatabase;
|
||||||
|
import android.database.sqlite.SQLiteOpenHelper;
|
||||||
|
import android.util.Log;
|
||||||
|
import android.widget.Toast;
|
||||||
|
|
||||||
|
import androidx.annotation.Nullable;
|
||||||
|
|
||||||
|
import com.example.coen390_assignment2.Models.StudentProfile;
|
||||||
|
import com.example.coen390_assignment2.Models.StudentProfileContract;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
import java.time.format.DateTimeFormatter;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.List;
|
||||||
|
|
||||||
|
public class StudentProfileDBHelper extends SQLiteOpenHelper {
|
||||||
|
private static final int DATABASE_VERSION = 1;
|
||||||
|
private Context context = null;
|
||||||
|
|
||||||
|
public StudentProfileDBHelper(@Nullable Context context) {
|
||||||
|
super(context, StudentProfileContract.StudentProfileEntry.DATABASE_NAME, null, DATABASE_VERSION);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onCreate(SQLiteDatabase db) {
|
||||||
|
//Create a table
|
||||||
|
String CREATE_COURSE_TABLE = "CREATE TABLE " + StudentProfileContract.StudentProfileEntry.TABLE_NAME + " (" + StudentProfileContract.StudentProfileEntry.COLUMN_NAME_PROFILE_ID + " INTEGER PRIMARY KEY, " + StudentProfileContract.StudentProfileEntry.COLUMN_NAME_SURNAME + " TEXT NOT NULL, " + StudentProfileContract.StudentProfileEntry.COLUMN_NAME_NAME + " TEXT NOT NULL, " + StudentProfileContract.StudentProfileEntry.COLUMN_NAME_PROFILE_GPA + " REAL NOT NULL, " + StudentProfileContract.StudentProfileEntry.COLUMN_NAME_PROFILE_CREATION_DATE + " TEXT NOT NULL);";
|
||||||
|
|
||||||
|
db.execSQL(CREATE_COURSE_TABLE);
|
||||||
|
Log.d("StudentProfileDBHelper", "onCreate: Created course table" + CREATE_COURSE_TABLE);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
|
||||||
|
//Drop older table
|
||||||
|
db.execSQL("DROP TABLE IF EXISTS " + StudentProfileContract.StudentProfileEntry.TABLE_NAME);
|
||||||
|
onCreate(db);
|
||||||
|
}
|
||||||
|
|
||||||
|
public long insertStudentProfile(StudentProfile studentProfile) {
|
||||||
|
long id = -1;
|
||||||
|
SQLiteDatabase db = this.getWritableDatabase();
|
||||||
|
ContentValues contentValues = new ContentValues();
|
||||||
|
|
||||||
|
contentValues.put(StudentProfileContract.StudentProfileEntry.COLUMN_NAME_PROFILE_ID, studentProfile.getProfileID());
|
||||||
|
contentValues.put(StudentProfileContract.StudentProfileEntry.COLUMN_NAME_SURNAME, studentProfile.getSurname());
|
||||||
|
contentValues.put(StudentProfileContract.StudentProfileEntry.COLUMN_NAME_NAME, studentProfile.getName());
|
||||||
|
contentValues.put(StudentProfileContract.StudentProfileEntry.COLUMN_NAME_PROFILE_GPA, studentProfile.getGPA());
|
||||||
|
contentValues.put(StudentProfileContract.StudentProfileEntry.COLUMN_NAME_PROFILE_CREATION_DATE, studentProfile.getProfileCreationDate().format(DateTimeFormatter.ISO_LOCAL_DATE));
|
||||||
|
|
||||||
|
try {
|
||||||
|
// row id
|
||||||
|
id = db.insertOrThrow(StudentProfileContract.StudentProfileEntry.TABLE_NAME, null, contentValues);
|
||||||
|
} catch (Exception e) {
|
||||||
|
Toast.makeText(context, "DB insert failed: " + e.getMessage(), Toast.LENGTH_LONG).show();
|
||||||
|
} finally {
|
||||||
|
db.close();
|
||||||
|
}
|
||||||
|
return id;
|
||||||
|
}
|
||||||
|
|
||||||
|
public List<StudentProfile> getAllStudentProfile() {
|
||||||
|
SQLiteDatabase db = this.getReadableDatabase();
|
||||||
|
Cursor cursor = null;
|
||||||
|
List<StudentProfile> studentProfiles = new ArrayList<>();
|
||||||
|
|
||||||
|
try {
|
||||||
|
cursor = db.query(StudentProfileContract.StudentProfileEntry.TABLE_NAME, null, null, null, null, null, null);
|
||||||
|
if (cursor != null) {
|
||||||
|
if (cursor.moveToFirst()) {
|
||||||
|
do {
|
||||||
|
@SuppressLint("Range") int profileID = cursor.getInt(cursor.getColumnIndex(StudentProfileContract.StudentProfileEntry.COLUMN_NAME_PROFILE_ID));
|
||||||
|
@SuppressLint("Range") String profileSurname = cursor.getString(cursor.getColumnIndex(StudentProfileContract.StudentProfileEntry.COLUMN_NAME_SURNAME));
|
||||||
|
@SuppressLint("Range") String profileName = cursor.getString(cursor.getColumnIndex(StudentProfileContract.StudentProfileEntry.COLUMN_NAME_NAME));
|
||||||
|
@SuppressLint("Range") float profileGPA = cursor.getFloat(cursor.getColumnIndex(StudentProfileContract.StudentProfileEntry.COLUMN_NAME_PROFILE_GPA));
|
||||||
|
@SuppressLint("Range") String profileCreationDate = cursor.getString(cursor.getColumnIndex(StudentProfileContract.StudentProfileEntry.COLUMN_NAME_PROFILE_CREATION_DATE));
|
||||||
|
|
||||||
|
StudentProfile studentProfile = new StudentProfile(profileSurname, profileName, profileID, profileGPA, LocalDate.parse(profileCreationDate, DateTimeFormatter.ISO_LOCAL_DATE));
|
||||||
|
|
||||||
|
studentProfiles.add(studentProfile);
|
||||||
|
} while (cursor.moveToNext());
|
||||||
|
}
|
||||||
|
cursor.close();
|
||||||
|
}
|
||||||
|
} catch (Exception e) {
|
||||||
|
Toast.makeText(context, "DB get failed: " + e.getMessage(), Toast.LENGTH_LONG).show();
|
||||||
|
} finally {
|
||||||
|
db.close();
|
||||||
|
}
|
||||||
|
return studentProfiles;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,53 @@
|
|||||||
|
package com.example.coen390_assignment2.Models;
|
||||||
|
|
||||||
|
import java.time.LocalDateTime;
|
||||||
|
|
||||||
|
public class Access {
|
||||||
|
private int accessID;
|
||||||
|
|
||||||
|
private long profileID;
|
||||||
|
|
||||||
|
private AccessType accessType;
|
||||||
|
|
||||||
|
private LocalDateTime timestamp;
|
||||||
|
|
||||||
|
public Access(int accessID, long profileID, AccessType accessType, LocalDateTime timestamp) {
|
||||||
|
this.accessID = accessID;
|
||||||
|
this.profileID = profileID;
|
||||||
|
this.accessType = accessType;
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public int getAccessID() {
|
||||||
|
return accessID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccessID(int accessID) {
|
||||||
|
this.accessID = accessID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getProfileID() {
|
||||||
|
return profileID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProfileID(long profileID) {
|
||||||
|
this.profileID = profileID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public AccessType getAccessType() {
|
||||||
|
return accessType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAccessType(AccessType accessType) {
|
||||||
|
this.accessType = accessType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDateTime getTimestamp() {
|
||||||
|
return timestamp;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setTimestamp(LocalDateTime timestamp) {
|
||||||
|
this.timestamp = timestamp;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,16 @@
|
|||||||
|
package com.example.coen390_assignment2.Models;
|
||||||
|
|
||||||
|
import android.provider.BaseColumns;
|
||||||
|
|
||||||
|
public final class AccessContract {
|
||||||
|
private AccessContract(){}
|
||||||
|
|
||||||
|
public static class AccessEntry implements BaseColumns{
|
||||||
|
public static final String DATABASE_NAME = "access-entry-db";
|
||||||
|
public static final String TABLE_NAME = "access";
|
||||||
|
public static final String COLUMN_NAME_ACCESS_ID = "access-id";
|
||||||
|
public static final String COLUMN_NAME_PROFILE_ID = "profile-id";
|
||||||
|
public static final String COLUMN_NAME_ACCESS_TYPE = "access-type";
|
||||||
|
public static final String COLUMN_NAME_TIMESTAMP = "timestamp";
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,28 @@
|
|||||||
|
package com.example.coen390_assignment2.Models;
|
||||||
|
|
||||||
|
public enum AccessType {
|
||||||
|
CREATED("Created"),
|
||||||
|
OPENED("Opened"),
|
||||||
|
CLOSED("Closed"),
|
||||||
|
DELETED("Deleted");
|
||||||
|
|
||||||
|
private String accessType;
|
||||||
|
|
||||||
|
AccessType(String accessType) {
|
||||||
|
this.accessType = accessType;
|
||||||
|
}
|
||||||
|
|
||||||
|
public static AccessType matchEnum(String input) {
|
||||||
|
for (AccessType enumValue : AccessType.values()) {
|
||||||
|
if (enumValue.getStringAccessType().equals(input)) {
|
||||||
|
return enumValue;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getStringAccessType() {
|
||||||
|
return this.accessType;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,55 @@
|
|||||||
|
package com.example.coen390_assignment2.Models;
|
||||||
|
|
||||||
|
import java.time.LocalDate;
|
||||||
|
|
||||||
|
public class StudentProfile {
|
||||||
|
private long profileID;
|
||||||
|
private String name;
|
||||||
|
private String surname;
|
||||||
|
private float gpa;
|
||||||
|
private final LocalDate profileCreationDate;
|
||||||
|
|
||||||
|
public StudentProfile(String surname, String name, long profileID, float gpa, LocalDate profileCreationDate) {
|
||||||
|
this.surname = surname;
|
||||||
|
this.name = name;
|
||||||
|
this.profileID = profileID;
|
||||||
|
this.gpa = gpa;
|
||||||
|
this.profileCreationDate = profileCreationDate;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getSurname() {
|
||||||
|
return this.surname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setSurname(String surname) {
|
||||||
|
this.surname = surname;
|
||||||
|
}
|
||||||
|
|
||||||
|
public String getName() {
|
||||||
|
return this.name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setName(String name) {
|
||||||
|
this.name = name;
|
||||||
|
}
|
||||||
|
|
||||||
|
public long getProfileID() {
|
||||||
|
return this.profileID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setProfileID(long profileID) {
|
||||||
|
this.profileID = profileID;
|
||||||
|
}
|
||||||
|
|
||||||
|
public float getGPA(){
|
||||||
|
return this.gpa;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setGPA(float gpa){
|
||||||
|
this.gpa = gpa;
|
||||||
|
}
|
||||||
|
|
||||||
|
public LocalDate getProfileCreationDate() {
|
||||||
|
return profileCreationDate;
|
||||||
|
}
|
||||||
|
}
|
@ -0,0 +1,22 @@
|
|||||||
|
package com.example.coen390_assignment2.Models;
|
||||||
|
|
||||||
|
import android.provider.BaseColumns;
|
||||||
|
|
||||||
|
public final class StudentProfileContract {
|
||||||
|
|
||||||
|
// To prevent someone from accidentally instantiating the contract class,
|
||||||
|
// make the constructor private.
|
||||||
|
private StudentProfileContract() {
|
||||||
|
}
|
||||||
|
|
||||||
|
/* Inner class that defines the table contents */
|
||||||
|
public static class StudentProfileEntry implements BaseColumns {
|
||||||
|
public static final String DATABASE_NAME = "student-profile-db";
|
||||||
|
public static final String TABLE_NAME = "profile";
|
||||||
|
public static final String COLUMN_NAME_PROFILE_ID = "profile-id";
|
||||||
|
public static final String COLUMN_NAME_SURNAME = "surname";
|
||||||
|
public static final String COLUMN_NAME_NAME = "name";
|
||||||
|
public static final String COLUMN_NAME_PROFILE_GPA = "profile-gpa";
|
||||||
|
public static final String COLUMN_NAME_PROFILE_CREATION_DATE = "profile-creation-date";
|
||||||
|
}
|
||||||
|
}
|
Loading…
x
Reference in New Issue
Block a user