我想从Firebase Firestore(名称数组)下载数据并创建SQL表,并使用来自服务器的数据向该表提供数据。每次启动该应用程序时,我都会从firebase中检查版本号,是否与SQL数据库版本相同,如果不是,则重新创建表并用新数据填充该表。
问题是我在创建和检查版本号时做错了,所以我得到了
android.database.sqlite.SQLiteException:无法将数据库从版本5降级到版本4。
此异常非常简单,但我不知道我搞砸了。
这是我的SQLiteOpenHelper
班
public class SQLBazaNamirnica extends SQLiteOpenHelper {
private static final String Ime_Baze = "baza_namirnica";
private static final String IME_TABELE = "tabela_namirnica";
private static final String ID_KOLONA = "id";
private static final String NAMIRNICA_KOLONA = "namirnica";
private static int VERZIJA_BAZE = 4;
SQLiteDatabase db;
Context context;
public SQLBazaNamirnica(Context context) {
super(context,Ime_Baze,null,VERZIJA_BAZE);
}
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
this.db = sqLiteDatabase;
String kreirajTabelu = "CREATE TABLE " + IME_TABELE +
" (" + ID_KOLONA + " INTEGER PRIMARY KEY AUTOINCREMENT," +
NAMIRNICA_KOLONA + " TEXT )";
db.execSQL(kreirajTabelu);
}
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase,int staraV,int novaV) {
if(staraV != novaV)
sqLiteDatabase.execSQL("DROP TABLE IF EXISTS " + IME_TABELE);
}
boolean CheckVerziju(int novaVer) {
//db = getwritabledatabase();
SQLiteDatabase _db = this.getwritabledatabase();
Log.d("SQL VERZIJA","CheckVerziju: VERZIJA BAZE: " + _db.getVersion() + " \n VERZIJA FIREBASE BAZE: " + novaVer);
if(_db.getVersion() != novaVer) {
//VERZIJA_BAZE = novaVer;
_db.setVersion(novaVer);
return true;
} else return false;
}
void KreirajTabelu() {
SQLiteDatabase db = this.getwritabledatabase();
db.execSQL("DROP TABLE IF EXISTS " + IME_TABELE);
String kreirajTabelu = "CREATE TABLE " + IME_TABELE +
" (" + ID_KOLONA + " INTEGER PRIMARY KEY AUTOINCREMENT," +
NAMIRNICA_KOLONA + " TEXT )";
db.execSQL(kreirajTabelu);
Log.d("SQL","KreirajTabelu: BAZA JE KREIRANA");
}
void updateBazu(SQLiteDatabase db,ArrayList<String> namirnice) {
db = getwritabledatabase();
Contentvalues cv = new Contentvalues();
for(String namirnica : namirnice) {
/* String query = "INSERT INTO " + IME_TABELE + " (" +
NAMIRNICA_KOLONA + ") VALUES (" + namirnica + ")"; */
cv.put(NAMIRNICA_KOLONA,namirnica);
db.insert(IME_TABELE,cv);
}
}
}
这就是我作为检查版本号的方式:
bazaNamirnica = new SQLBazaNamirnica(Mainactivity.this);
namirniceDokument.get().addOnSuccessListener(new OnSuccessListener<Documentsnapshot>() {
@Override
public void onSuccess(Documentsnapshot documentsnapshot) {
if(documentsnapshot.exists()) {
int verzijaBaze = documentsnapshot.getLong("verzija").intvalue();
if(bazaNamirnica.getReadableDatabase().getVersion() != verzijaBaze) {
//bazaNamirnica.ve
bazaNamirnica.KreirajTabelu();
Map<String,Object> namirnice = documentsnapshot.getData();
ArrayList<String> namirniceFinal = new ArrayList<>();
for(Map.Entry<String,Object> namirnica : namirnice.entryset()) {
namirniceFinal.add(namirnica.getvalue().toString());
}
bazaNamirnica.updateBazu(bazaNamirnica.getwritabledatabase(),namirniceFinal);
bazaNamirnica.getwritabledatabase().setVersion(verzijaBaze);
}