کپی و آپدیت دیتابیس ( آموزش کامل )
تا به امروز، من توی برنامه هام دیتابیس رو کپی میکردم و ازش استفاده میکردم، در آپدیت ها دیتابیس قبلی رو پاک میکردم و دیتابیس جدید رو جایگزین میکردم. اما این روش همیشه جواب نمید!
1 : زمانی که حجم دیتابیس بالا باشه
2 : توی بعضی از گوشی ها دیتابیس قبلی پاک نمیشه، در نتیجه آپدیت دیتابیس با مشکل روبه رو میشه
.
روشی که من پیدا کردم استفاده از SQLiteAssetHelper هست که یک Library کامل برای کپی، آپدیت و ... دیتابیس هست.
در دیتابیس هایی که حجم بالایی دارن یک راه اینه که به فایل های کوچکتر تقسیم بشن که این راه حل من نیست پس این Library میتونه گزینه خوبی باشه
لینک GitHub : لینک
طریقه استفاده : sqliteassethelper-2.0.1.jar رو در فولدر libs کپی میکنیم
برای استفاده در API پایین تر از 10 ( طبق مستندات ) باید دیتابیس رو به صورت فایل زیپ قرار بدیم مانند : database.sqlite.zip
بعد کلاس زیر رو میسازیم
public class DataBaseConnection extends SQLiteAssetHelper {
private static final String DATABASE_NAME = "database.sqlite.zip";
private static final int DATABASE_VERSION = 1;
public DataBaseConnection(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}
خوب تا اینجاشو بلد بودم، ولی دیتابیسم یا خالی کپی میشه یا اصلا کپی نمیشه
ممنون میشم اگر از این Library استفاده کردید یا علامند هستید، این روش رو تست کنید و آموزش رو کامل کنید
اگر هم راه حل دیگه ای با توجه به شرایط میدونید در پاسخ درج کنید
اینم برای ارتباط با دیتابیس
private DataBaseConnection db = new DataBaseConnection(this);
من این کارهایی که گفتین انجام دادم اما با اررور زیر مواجه شدم
android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database
که از خط زیر گرفته میشد :
final SQLiteDatabase database = db.getReadableDatabase();
آیا به جز کارهایی گفتین کار دیگه ای باید انجام بشه؟ مثل تعریف کردن کلاس G یا .... چون به چیز دیگه ای اشاره نفرمودین
دوستان بنده همه کارهایی گفتید رو انجام دادم، اما این ارور رو میده. من داخل همین پوشه databases گذاشتم. هم زیپ کردم نشد، و هم بدون زیپ گذاشتم و بازم نشد. هم اسمشو با پسوند گذاشتم (یعنی databa.db) نشد و هم بدون پسوند که بازم نشد. اینم خطاش. اسم دیتابیس رو گذاشتم tasnim2:
01-31 21:09:33.877 9928-9928/rasadev.ir.tasnim E/SQLiteLog: (14) cannot open file at line 30052 of [b3bb660af9]
01-31 21:09:33.877 9928-9928/rasadev.ir.tasnim E/SQLiteLog: (14) os_unix.c:30052: (2) open(/data/data/rasadev.ir.tasnim/databases/tasnim2) -
01-31 21:09:33.879 9928-9928/rasadev.ir.tasnim E/SQLiteLog: (14) cannot open file at line 30052 of [b3bb660af9]
01-31 21:09:33.879 9928-9928/rasadev.ir.tasnim E/SQLiteLog: (14) os_unix.c:30052: (2) open(/data/data/rasadev.ir.tasnim/databases/tasnim2)
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .