اپدیت دیتابیس خارجی
دوستان دفعه اوله داخل برنامه از دیتابیس خارجی استفاده کردم
دیتابیس با نرم افزار DB Browser SQLite ایجاد کردم و داخل برنامه گذاشتم و تونستم استفاده کنم
فقط مشکل موقع آپدیت دیتابیس هست که وقتی فایل جدید جایگزین و مجددا برنامه نصب میشه اون رو کپی نمی کنه
و باید برنامه حذف و نصب بشه یا دیتاش پاک بشه که دیتابیس جدید کپی بشه
من ابتدا این کد صدا میزنم که اگه دیتابیس وجود نداشت اونو کپی کنه
حالا داخل این شرط چجوری باید بگم اگه وجود داشت نسخه شو بررسی کن ؟
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase(); // چک کردن دیتابیس
if (dbExist) {
// در این قسمت
} else {
this.getReadableDatabase();
try {
copyDataBase();
} catch (IOException e) {
throw new Error("Error copying database");
}
}
}
این هم کد اپدیت است ولی نمی دونم چجوری باید استفاده بشه
من داخل DB Browser نسخه دیتابیس user version زیاد میکنم ولی اینجا نمیدونم چطور استفاده میشه
داخل sqliteOpenHelper هم نسخه دیتابیس این طور معرفی شده :
private static int DB_VERSION = 1;
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion){
try {
copyDataBase();
} catch (IOException e) {
e.printStackTrace();
}
}
}
ممنون
سلام
اگه برنامت افلاینه اصلا نیازی به اپدیت نیست موقع نصب، اگه دیتابیس وجود داشت حذفش کن دیتابیس جدید رو اضافه کن ولی اگه آنلاینه میتونی یه رکورد داخل دیتابیس بزاری به اسم db_version که موقع آپدیت ورژن رو از دیتابیس بگیری اگه ورژنش قدیمی بود جایگزینش کنی
public class G extends UBase {
public void createAppDirectories() {
File dbDir = new File(DB_DIR);
if (!dbDir.exists()) {
dbDir.mkdirs();
}
createOrOpenDatabase();
}
public void createOrOpenDatabase() {
new DeleteDbOneInstallApp(DB_DIR + DB_NAME);
copyAssetToSdcard();
if (database != null) {
return;
}
database = SQLiteDatabase.openOrCreateDatabase(DB_DIR + DB_NAME, null);
}
public void deleteDB(String filePath) {
File dbDir = new File(filePath);
if (dbDir.exists()) {
dbDir.delete();
}
}
public void copyAssetToSdcard() {
File file = new File(DB_DIR + DB_NAME);
if (!file.exists()) {
try {
AssetManager assetManager = getContext().getAssets();
InputStream inputStream = assetManager.open(DB_ASSETS);
HelperIO.copyFileAssetsToSdCard(inputStream, DB_DIR + DB_NAME);
} catch (IOException e) {
e.printStackTrace();
}
}
}
}
public class DeleteDbOneInstallApp {
public DeleteDbOneInstallApp(String filePath){
try {
G.sharedPreferencesDeleteDB = PreferenceManager.getDefaultSharedPreferences(G.getContext());
boolean isDeleteApp = G.sharedPreferencesDeleteDB.getBoolean("IS_DELETE_DB", false);
if (!isDeleteApp) {
G.app.deleteDB(filePath);
SharedPreferences.Editor editor = G.sharedPreferencesDeleteDB.edit();
editor.putBoolean("IS_DELETE_DB", true);
editor.apply();
}
} catch (Exception e) {
e.printStackTrace();
}
}
}
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .