Можно ли иметь несколько databaseHelpers для одной базы данных - PullRequest
0 голосов
/ 18 апреля 2020

Итак, в моей базе данных у меня есть DatabaseHelper, который позволяет мне создавать и обращаться к таблице в указанной c базе данных. Тем не менее, у меня также есть другой помощник по базе данных, который позволяет мне создавать и получать доступ к нескольким другим таблицам в зависимости от имени таблицы, которую я передаю.

Это вызывает у меня проблемы некоторое время, так как я не создаю новую таблицу, когда я говорю об этом. Мне было интересно, конфликтуют ли методы переопределения в этих классах DatabaseHelper как-то? Хотя помощникам базы данных не дают одно и то же имя, методы переопределения, очевидно, таковы.

Хотя я не думаю, что это имеет много смысла, вся эта проблема сводит меня с ума, поэтому я хватаюсь за стр aws.

Это мой первый класс databaseHelper, который работает хорошо:

package com.example.song2sheet;

import android.content.ContentValues;
import android.content.Context;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;

import java.util.ArrayList;

public class DatabaseHelper extends SQLiteOpenHelper {

    public static String DATABASE_NAME = "Song_Two_Sheet_Database";
    public static final String TABLE_NAME = "Track_Table";
    public static final String col0 = "Track_ID";
    public static final String col1 = "Track_Title";
    public static final String col2 = "Track_Notes";
    public static final String col3 = "Track_Tempo";
    public static final String col4 = "Track_Dated";
    public static final String col5 = "vTempo";
    public static final String col6 = "ATempo";

    public DatabaseHelper(Context mcontext) {
        super(mcontext, DATABASE_NAME, null, 1);
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        String createTable = "CREATE TABLE Track_Table (Track_ID INTEGER PRIMARY KEY AUTOINCREMENT, " +
                "Track_Title TEXT, Track_Notes TEXT, Track_Tempo TEXT, " +
                "Track_Dated TEXT, vTempo TEXT, aTempo TEXT)";
        db.execSQL(createTable);
    }

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

    public boolean addData(Track track) {

        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(col1, track.getTrackTitle());
        contentValues.put(col2, track.getTrackNotes());
        contentValues.put(col3, track.getTrackTempo());
        contentValues.put(col4, track.getDate());
        contentValues.put(col5, track.hasVisTempo());
        contentValues.put(col6, track.hasAudioTempo());

        long result = db.insert(TABLE_NAME, null, contentValues);

        if (result == -1) {
            return false;
        }
        return true;
    }

    public Cursor loadData() {
        SQLiteDatabase loadedTracks = this.getWritableDatabase();
        Cursor loadedInTracks = loadedTracks.rawQuery("SELECT * FROM Track_Table", null);
        return loadedInTracks;
    }

    public void removeItem(Track trackID) {
        SQLiteDatabase loadedTracks = this.getWritableDatabase();
        loadedTracks.delete(TABLE_NAME, "Track_ID = ?", new String[]{trackID.getID()});
    }

    public Track loadLastNote(Context mcontext){
        SQLiteDatabase databaseToLoadFrom = this.getWritableDatabase();
        Cursor lastNote = databaseToLoadFrom.rawQuery("SELECT * FROM " + TABLE_NAME, null);

        Track tempTrack = new Track();

        while(lastNote.moveToNext()) {
            tempTrack.setID(lastNote.getString(0));
            tempTrack.setTrackTitle(lastNote.getString(1));
            tempTrack.setTrackNotes(lastNote.getString(2));
            tempTrack.setStringTempo(lastNote.getString(3), mcontext);
            tempTrack.setVisualMetronome(Boolean.valueOf(lastNote.getString(4)));
            tempTrack.setAuditoryMetronome(Boolean.valueOf(lastNote.getString(5)));
        }
        return tempTrack;
    }

    public void updateItem(Track updateTrack){
        SQLiteDatabase databaseToEdit = this.getWritableDatabase();
        databaseToEdit.execSQL("UPDATE Track_Table SET " + col1 + " = '" + updateTrack.getTrackTitle() + "' WHERE " + col0 + " = '" + updateTrack.getID() + "'");
        databaseToEdit.execSQL("UPDATE Track_Table SET " + col2 + " = '" + updateTrack.getTrackNotes() + "' WHERE " + col0 + " = '" + updateTrack.getID() + "'");
        databaseToEdit.execSQL("UPDATE Track_Table SET " + col3 + " = '" + updateTrack.getTrackTempo() + "' WHERE " + col0 + " = '" + updateTrack.getID() + "'");
        databaseToEdit.execSQL("UPDATE Track_Table SET " + col5 + " = '" + Boolean.toString(updateTrack.hasVisTempo()) + "' WHERE " + col0 + " = '" + updateTrack.getID() + "'");
        databaseToEdit.execSQL("UPDATE Track_Table SET " + col6 + " = '" + Boolean.toString(updateTrack.hasAudioTempo()) + "' WHERE " + col0 + " = '" + updateTrack.getID() + "'");
    }
}

И вот мой второй класс DatabaseHelper, который вызывает у меня проблемы:

package com.example.song2sheet;

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;

public class NoteDatabaseHelper extends SQLiteOpenHelper {

    public static String DATABASE_NAME = "Song_Two_Sheet_Database";
    public String TABLE_NAME;
    public static final String col0 = "Note_ID";
    public static final String col1 = "note_classification";
    public static final String col2 = "sharp";
    public static final String col3 = "flat";
    public static final String col4 = "dotted";
    public static final String col5 = "octave";
    public static final String col6 = "note_duration";

    public NoteDatabaseHelper(@Nullable Context context, String tableName) {
        super(context, DATABASE_NAME, null, 1);

        TABLE_NAME = tableName;
    }

    @Override
    public void onCreate(SQLiteDatabase db) {
        StringBuilder createTable = new StringBuilder();
        createTable.append("CREATE TABLE ");
        createTable.append(TABLE_NAME);
        createTable.append(" (Note_ID INTEGER PRIMARY KEY AUTOINCREMENT, note_classification TEXT, sharp TEXT, flat TEXT, dotted TEXT, octave TEXT, note_duration TEXT)");
        db.execSQL(createTable.toString());
    }

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

    public boolean addData(Note note) {

        SQLiteDatabase db = this.getWritableDatabase();
        ContentValues contentValues = new ContentValues();
        contentValues.put(col1, note.getNoteClassification().toString());
        contentValues.put(col2, note.getSharp());
        contentValues.put(col3, note.getFlat());
        contentValues.put(col4, note.getDotted());
        contentValues.put(col5, note.getOctave());
        contentValues.put(col6, note.getNoteDuration().toString());

        long result = db.insert(TABLE_NAME, null, contentValues);

        if (result == -1) {
            return false;
        }
        return true;
    }

    public Cursor loadData() {
        SQLiteDatabase databaseToLoadFrom = this.getWritableDatabase();
        Cursor loadedNotes = databaseToLoadFrom.rawQuery("SELECT * FROM " + TABLE_NAME , null);
        return loadedNotes;
    }

    public void removeNote(Note noteToGo) {
        SQLiteDatabase databaseToDeleteFrom = this.getReadableDatabase();
        databaseToDeleteFrom.delete(TABLE_NAME, "Note_ID = ?", new String[]{noteToGo.getId()});
    }

    public Cursor loadLastNote(String id){
        SQLiteDatabase databaseToLoadFrom = this.getWritableDatabase();
        Cursor loadedNotes = databaseToLoadFrom.rawQuery("SELECT * FROM  " + TABLE_NAME + " WHERE Note_ID = " + id, null);
        return loadedNotes;
    }

    public Note getLastRecord(){
        SQLiteDatabase database = this.getWritableDatabase();
        Cursor lastNote = database.rawQuery("SELECT * " + " FROM " + TABLE_NAME + " WHERE   ID = (SELECT MAX(ID)  FROM " + TABLE_NAME + ");", null);
        Note tempNote = new Note();
        tempNote.setId(lastNote.getString(0));
        tempNote.setNoteClassification(NoteClassification.valueOf(lastNote.getString(1)));
        tempNote.setSharp(Boolean.valueOf(lastNote.getString(2)));
        tempNote.setFlat(Boolean.valueOf(lastNote.getString(3)));
        tempNote.setDotted(Boolean.valueOf(lastNote.getString(4)));
        tempNote.setOctave(Integer.valueOf(lastNote.getString(5)));
        tempNote.setNoteDuration(NoteDuration.valueOf(lastNote.getString(6)));

        return tempNote;
    }
}

Если вы увидите что-то глупое, что я сделал, я был бы признателен всем это может указать на это.

...