Как экспортировать таблицу SQLite в файл Excel в Android Studio? - PullRequest
0 голосов
/ 03 декабря 2018

Я создаю приложение для Android, функция которого состоит в том, чтобы войти и принять участие.Он имеет две таблицы, таблицу COURSES, которая содержит все классы и их детали, и таблицы CLASS, соответствующие каждой строке в COURSES.Каждая таблица CLASS регистрирует посещаемость с помощью COL1: FIRST_NAME, COL: 2LAST_NAME, затем COL3, COL4 и т. Д., Которые создаются динамически при вызове, что обозначает посещаемость для конкретного студента в тот день.открытый класс CoursesDatabase extends SQLiteOpenHelper {частная статическая CoursesDatabase cd = null;

public static final int DATABASE_VERSION = 2;
public static final String DATABASE_NAME = "course_manager.db";
public static final String COURSES_TABLE_NAME = "COURSES";
public static final String KEY_ID = "ID";                         //column index 0
public static final String KEY_NAME= "COURSE_NAME";               //column index 1
public static final String KEY_CODE = "COURSE_CODE";              //column index 2
public static final String KEY_HOUR = "COURSE_HOUR";              //column index 3
public static final String KEY_MINUTE = "COURSE_MINUTE";          //column index 4
public static final String KEY_INSTRUCTOR = "COURSE_INSTRUCTOR";  //column index 5
public static final String IS_ON = "IS_ON";                       //column index 6
public static final String LATEST_TIME = "LATEST_TIME";           //column index 7

private CoursesDatabase(Context context){
    super(context, DATABASE_NAME, null, DATABASE_VERSION);
    deleteAll();
    addCourse(new Course("SE_354", "Software_Engineering", "12345", 10, 30, "John Doe 1"));
    addCourse(new Course("CE_237", "CompSci_2", "13346", 11, 0, "john doe2"));
}

public static CoursesDatabase getInstance(Context context){
    if (cd == null){
        cd = new CoursesDatabase(context);
    }
    return cd;
}

@Override
public void onCreate(SQLiteDatabase cd) {
    final String SQL_CREATE_USER_TABLE = "CREATE TABLE " + COURSES_TABLE_NAME + "(" +
            KEY_ID          +   " TEXT NOT NULL, "  +   // column 0
            KEY_NAME        +   " TEXT NOT NULL, "  +   // column 1
            KEY_CODE        +   " TEXT NOT NULL, "  +   // column 2
            KEY_HOUR        +   " INT, "            +   // column 3
            KEY_MINUTE      +   " INT, "            +   // column 4
            KEY_INSTRUCTOR  +   " TEXT,"            +   // column 5
            IS_ON           +   "INT DEFAULT 0,"    +   // column 6
            LATEST_TIME     +   "String);";             // column 7


    cd.execSQL(SQL_CREATE_USER_TABLE);
}

//Creates a table to log attendance for each class
String KEY_STUDENT_FIRST_NAME = "First_Name";
String KEY_STUDENT_LAST_NAME = "Last_Name";

public void newClassTable(Course course){
    SQLiteDatabase cd = this.getWritableDatabase();
    String CLASS_TABLE_NAME = course.getId() + "_" + course.getName() + "_" + course.getHour() + course.getMinute();//needs refactoring

    final String SQL_CREATE_CLASS_TABLE = "CREATE TABLE IF NOT EXISTS " + CLASS_TABLE_NAME + "(" +
            KEY_STUDENT_FIRST_NAME     +   " STRING, " +  // column 0
            KEY_STUDENT_LAST_NAME      +   " STRING);";   // column 1
    cd.execSQL(SQL_CREATE_CLASS_TABLE);
}

public boolean addSession(Course course)
{
    SQLiteDatabase cd = this.getWritableDatabase();
    //current date in numerical format, e.g. 08/12/18
    String CLASS_TABLE_NAME = course.getId() + "_" + course.getName() + "_" + course.getHour() + course.getMinute();//needs refactoring
    cd.execSQL("ALTER TABLE " + CLASS_TABLE_NAME + " ADD COLUMN " + "'" + course.getLatestTime() + "'" + " INT;");
    return true;
}

//****NEEDS TESTING ****
//takes the attendance of a student in course table. If the student does not exist in the course table, the student is then added.
public boolean attendStudentInCourse(User student, Course course) {
    SQLiteDatabase cd = this.getWritableDatabase();
    String CLASS_TABLE_NAME = course.getId() + "_" + course.getName() + "_" + course.getHour() + course.getMinute();//needs refactoring

    //if professor has not turned on the course yet exit
    if (!course.isAvailable()) {
        return false;
    }

    //if student has never attended course before, add their row
    Cursor cursor = cd.rawQuery("SELECT * FROM " + CLASS_TABLE_NAME + " WHERE First_Name = ? AND Last_Name = ? ",
                                                            new String[]{student.getFirst_name(),student.getLast_name()});
    if (!cursor.moveToNext())
    {
        ContentValues studentvalues = new ContentValues();
        studentvalues.put(KEY_STUDENT_FIRST_NAME, student.getFirst_name());
        studentvalues.put(KEY_STUDENT_LAST_NAME, student.getLast_name());
        cd.insert(CLASS_TABLE_NAME, null, studentvalues);
    }
    //otherwise, just tick their attendance on the current date
    ContentValues datevalue = new ContentValues();
    datevalue.put("'" + course.getLatestTime() + "'", 1);
    cd.update(CLASS_TABLE_NAME, datevalue, KEY_STUDENT_FIRST_NAME+" = ? AND " + KEY_STUDENT_LAST_NAME+" = ?", new String [] {student.getFirst_name(), student.getLast_name()});
    return true;
}



@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    db.execSQL("DROP TABLE IF EXISTS " + COURSES_TABLE_NAME);
    onCreate(db);
}

Мой вопрос заключается в том, как преобразовать конкретную таблицу CLASS в файл Excel (с сохранением форматирования столбцов / строк), который я затем мог бы отправитькак электронная почта на адрес электронной почты профессора?Общая критика также полезна, и я понимаю, что это, вероятно, плохой способ построения таблиц, но это мое первое знакомство с Android Studio и базой данных.Эта реализация имела смысл для меня, и я не слишком беспокоюсь об эффективности в данный момент.

Редактировать: обновленный код с рабочей версией.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...