آموزش های این وب سایت به صورت رایگان در دسترس است. اطلاعات بیشتر
بروز خطا
   [message]
اشتراک در سوال
رای ها
[dataList]

اپدیت دیتابیس خارجی

doost_fu  6 سال پیش  6 سال پیش
0 0

دوستان دفعه اوله داخل برنامه از دیتابیس خارجی استفاده کردم
دیتابیس با نرم افزار 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();
}
}
}

ممنون

 برای این سوال 2 پاسخ وجود دارد.
پاسخ به سوال 
FSR  6 سال پیش
+1 0

سلام

اگه برنامت افلاینه اصلا نیازی به اپدیت نیست موقع نصب، اگه دیتابیس وجود داشت حذفش کن دیتابیس جدید رو اضافه کن ولی اگه آنلاینه میتونی یه رکورد داخل دیتابیس بزاری به اسم db_version که موقع آپدیت ورژن رو از دیتابیس بگیری اگه ورژنش قدیمی بود جایگزینش کنی

+1 0
خیلی ممنون بله دیتابیس افلاین هست فقط طبق راهی که گفتید یه مشکل پیش میاد اینکه هر دفعه که برنامه اجرا بشه کد تکرار میشه و دیتابیس حذف و دوباره کپی میشه ! راهی هست که بشه این مورد چک کرد ؟ تشکر (6 سال پیش)
+1 0
شما میتونید یه شیریت پریفرنس تعریف کنید داخل برنامه وقتی که برنامه برای اولین بار اجرا میشه این مقدار رو true کنه شما هم برای دفعات بعدی میاید چک میکنید اگه false بود دیتابیس رو حذف و کپی میکنید اگه true بود که کاری انجام نمیدید (6 سال پیش)
0 0
بازم تشکر ولی خب موقعی که اپدیت برنامه روی اون نصب میشه مقدار اون متغییر از دفعه قبل در حالت true نیست ؟ خب کپی انجام نمیشه ! (6 سال پیش)
+1 0
مگه نمیگید برنامه افلاینه برای آپدیت شدن برنامه برنامه باید یه بار دیگه نصب بشه دیگه (6 سال پیش)
0 0
درسته اگر برنامه حذف و نصب بشه مشکلی نیست ولی برنامه حذف نمیشه نسخه جدید روی اون نصب میشه و متغیرهای ذخیره شده تغییر نمی کنند (6 سال پیش)
+1 0
اگه اینجوریه پس باید از onUpgrade استفاده کنی.تویه اینترنت نمونه کدهاش صد در صد هستش (6 سال پیش)
پاسخ به سوال 
FSR  6 سال پیش
0 0

 

 
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();
}
}
}

 

 


پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .