PDA

View Full Version : چگونه میتوان از دیتابیس backup گرفت



harani
دوشنبه 22 اردیبهشت 1393, 09:47 صبح
با سلام خدمت دوستان , همه شما با این پدیده روبرو شده اید که هنگامیکه برخی از تغییرات را برروی دیتابیس انجام میدهید برای آنکه برنامه اجرا شود مجبور به آن هستید که برنامه را یک بار از روی device ج unistall کنید .

فرض کنید من یک ورژن از برنامم رو توی بازار گذاشتم و خیلی ها دانلود کردند حالا اومدم و تغییراتی را روی دیتابیسم انجام دادم مو وورژن بالاتر را در بازار گذاشتم مسلماً اگر کاربران بخواهند از برنامه استفاده کنند میبایست برنامه رو یک بار unisatll کنند .که خیلی از داده های آن ها پاک میشود شما برای جلوگیری از این کار چه پیشنهادی میدهید .

saeed_g21
دوشنبه 22 اردیبهشت 1393, 10:12 صبح
به دیتابیس نسخه تعریف کنی حله !

harani
دوشنبه 22 اردیبهشت 1393, 10:37 صبح
به دیتابیس نسخه تعریف کنی حله !
تعریف که کردم ولی مددی نشد

saeed_g21
دوشنبه 22 اردیبهشت 1393, 11:09 صبح
واسه گفتن تغييرات بايد از onUpgrade استفاده کني درضمن همون تغييرات رو هم بايد در onCreate هم اعمال کني چون ممکن است ديتابيس رو پاک کنه اون وقت تغييراتي که سري قبل اعمال شده بود اين دفعه اعمال نشه و برنامه بخوابه
يک نمونه گذاشتم
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
if (newVersion > oldVersion) {
db.execSQL("alter table users add user text not null default 0");
}
}

Nevercom
دوشنبه 22 اردیبهشت 1393, 11:13 صبح
کلاس SQLiteOpenHelper خودش متدهایی داره که تو مدیریت این شرایط بهتون کمک کنه.

فرض کنید تو نسخه ی قبلی از برنامه، نسخه ی دیتابیس رو ۱ دادید، حالا نسخه رو میزارید ۲، برنامه که نصب و اجرا شد متد onUpgrade در کلاسSQLiteOpenHelper اجرا میشه، اونجا روند تغییر دیتابیس رو مدیریت کنید.
مثلاً کل اطلاعات دیتابیس رو در یک شئ ذخیره کنید، دیتابیس قبلی رو پاک کنید، دیتابیس با ساختار جدید رو بسازید و اطلاعات قبلی رو منتقل کنید

harani
دوشنبه 22 اردیبهشت 1393, 12:50 عصر
ممنون upgrade که شما میگید درست است ولی به عنوان مثال کاربر خودش نرم افزار را unistal میکنه و میخواد که ورژن جدید رو تو دستگاه ش بریزه تو این حالت هم اطلاعاتی که کاربر طی مثلاً چندین ماه وارد کرده همگی پاک خواهند شد . آیا راهی هست که اطلاعات همیشه ذخیره بمونه . (فعلاً قصد وب سرویس ندام) . مثلاً راهی است که دیتابیس ر به جای آینکه توی data/data بریزیم توی sdcard بریزیم و بخوینیم ؟

harani
سه شنبه 23 اردیبهشت 1393, 10:54 صبح
نظر خاصی نیست ؟

payamsp
سه شنبه 23 اردیبهشت 1393, 12:37 عصر
به صورت پیش فرض فایل دیتابیس در آدرس

Environment.getDataDirectory()+"/data/"+context.getPackageName()+"/databases/dbName

قرار داره که شما می تونید این فایل رو کپی کنید و در sdCard به عنوان پیشتیبان به کاربر ارائه بدید و برای بازگردوندن هم فایل پشتیبان رو به مسیر فایل دیتابیس برنامه کپی کنید و برگردونید (جایگزین کنید)

reza_web
شنبه 10 آبان 1393, 09:53 صبح
این که می فرمایید فایل را کپی کنیم منظورتون اینه که دستی بریم تو فایلهای گوشیمون و این فایل را پیدا کنیم و کپی کنیم یا اینکه توسط برنامه نویسی آن را کپی کنیم؟؟

tux-world
شنبه 10 آبان 1393, 20:34 عصر
خوب نه دیگه !! یه متد بنویسید اون کار رو انجام بده. این که دیگه کاری نداره