Итак, в моей базе данных у меня есть 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;
}
}
Если вы увидите что-то глупое, что я сделал, я был бы признателен всем это может указать на это.