Я полагаю, что ваша проблема в том, что у вас, вероятно, несколько помощников базы данных по одному на таблицу для одной / той же базы данных.
То есть тот, который вы показали, кажется, предназначен исключительно для пользовательской таблицы, и у вас, вероятно, есть другой для campanha таблицы.
Помощник по базам данных, как правило, подклассов класса SQLiteOpenHelper, который предназначен для открытия (подключения к) базы данных. Если файл базы данных не существует, он создаст базу данных, а затем откроет базу данных, как это делает, если файл базы данных существует (обратите внимание, что это не произойдет, пока не будет предпринята попытка доступа к базе данных).
Если файл базы данных не существует и он создает файл, то он вызовет метод onCreate . В этот раз он только вызывает onCreate (удаление файла, обычно путем очистки данных приложения или удаления приложения, приведет к запуску метода onCreate ).
Итак, что происходит, если у вас есть помощник по базе данных для каждой таблицы, так это то, что первый помощник по базам данных при попытке доступа к базе данных увидит, что файл базы данных не существует, создаст его и затем вызовет метод onCreate . Затем второй помощник базы данных видит, что файл базы данных существует и не вызывает его метод onCreate .
С точки зрения вашего кода (предполагается), Помощник по базам данных для таблицы campanha запускает onCreate и создает эту таблицу, но onCreate для таблицы user не запускается.
Исправление состоит в том, чтобы иметь одного помощника базы данных, который создает обе таблицы в методе onCreate , поэтому вам нужно объединить помощники базы данных.
Ваш код (отмечая, что таблица campanha, скорее всего, не будет соответствовать вашему дизайну) может выглядеть примерно так: -
public class UserBDHelper extends SQLiteOpenHelper {
private static final int DB_VERSION = 1;
private static final String DB_NAME = "tesp-psi-pl2-07-web";
private static final String TABLE_NAME = "user";
private static final String USERNAME = "username";
private static final String EMAIL = "email";
private static final String ACCESSTOKEN = "accesstoken";
private static final String NOMEPROPRIO = "userNomeProprio";
private static final String APELIDO = "userApelido";
private static final String MORADA = "userMorada";
private static final String DATANASC = "userDataNasc";
private static final String CAMPANHA_TABLE_NAME = "campanha"; //<<<<<<<<<< ADDED
private static final String CAMPANHA_MYCOLUMN = "mycolumn"; //<<<<<<<<< ADDED
private final SQLiteDatabase database;
public UserBDHelper(Context context) {
super(context, DB_NAME, null, DB_VERSION);
this.database = this.getWritableDatabase(); //<<<<<<<<<< Note this will access the database so the database will be created when the Database helper is instantiated
}
@Override
public void onCreate(SQLiteDatabase db) {
String createUsertable = "CREATE TABLE " + TABLE_NAME +
"(id INTEGER, " +
USERNAME + " TEXT NOT NULL, " +
EMAIL + " TEXT NOT NULL, " +
ACCESSTOKEN + " TEXT NOT NULL, " +
NOMEPROPRIO + " TEXT NOT NULL, " +
APELIDO + " TEXT NOT NULL, " +
DATANASC + " TEXT NOT NULL, " +
MORADA + " TEXT NOT NULL " +
")";
db.execSQL(createUsertable);
//<<<<<<<<<< ADDED this block of code
String createCampanhaTable = "CREATE TABLE + CAMPANHA_TABLE_NAME +
"(id INTEGER, " +
CAMPANHA_MYCOLUMN + " TEXT NOT NULL " +
")";
db.execSQL(createCampanhaTable); //<<<<<<<<< ADDED
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS " + TABLE_NAME);
db.execSQL("DROP TABLE IF EXISTS " + CAMPANHA_TABLE_NAME); //<<<<<<<<<< ADDED
this.onCreate(db);
}
public void removeAllUsers(){
this.database.delete(TABLE_NAME,null,null);
}
}
- ПРИМЕЧАНИЕ Выше приведен принципиальный код, весьма вероятно, что NOT будет действительным кодом, который вы хотите, и поэтому, скорее всего, его необходимо будет отрегулировать в соответствии с требованиями.
- ПРИМЕЧАНИЕ: ВЫ ДОЛЖНЫ УДАЛИТЬ ДАННЫЕ ПРИЛОЖЕНИЯ ИЛИ УДАЛИТЬ ДОБАВИТЬ ДО ПРОВЕДЕНИЯ С ИЗМЕНЕННЫМ КОДОМ
- ПРИМЕЧАНИЕ ВАМ НУЖНО ОБЕСПЕЧИТЬ ТО, ЧТО ИСПОЛЬЗУЕТСЯ ТОЛЬКО 1 ПОМОЩЬ БАЗЫ ДАННЫХ