هم اکنون عضو شوید

ورود

فراموشی گذرواژه

گذروازه خود را فراموش کردید ؟

ورود

عضو شوید

با عضویت در سایت از امکانات فوق العاده بهرمنده خواهید شد.

گرفتن backup از دیتابیس sqlite در اندروید

گرفتن backup از دیتابیس sqlite در اندروید

سلام در این سری از اموزش های دیتابیس در اندروید میخواهیم به گرفتن نسخه پشتیبان از دیتابیس بپردازیم.یکی از مهم ترین کارهایی که برای هر دیتابیسی لازم است گرفتن نسخه بکاپ از دیتابیس است که در این اموزش به طور کامل به ان پرداخته خواهد شد.

خب برای اینکار ما سه کار اصلی باید انجام دهیم که شامل export و  import و restore است.برای اینکار یک کلاس ایجاد میکنیم که همه این عملیات را انجام دهد.در اینجا نام این کلاس را DbExportImport قرار داده ایم:

خب ابتدا ما نام و مسیر دیتابیس پشتیبان خود را با در IMPORT_FILE مشخص کردیم.همینطور سه متغییر برای داشتن مسیر دیتابیس اصلی که در DATA_DIRECTORY_DATABASE طریقه استفاده از ان ها را میبینید.حالا به بررسی توابع میپردازیم:

exportDb:یک تابع با این نام ایجاد کردیم که وظیفه ایجاد دیتابیس پشتیبان را دارد و با کمی دقت متوجه عملیات های ان می شوید تنها نکته مهم ان تابع copyFile است که در ان استفاده شده است و وظیفه کپی دیتابیس را دارد در واقع از دیتابیس اصلی یک کپی به عنوان پشتیبان میگیرد.

restoreDb:این تابع وظیفه بازگردانی دیتابیس را از دیتابیس پشتیبان دارد همانطور که میبینید بعد از بررسی وجود فایل و و بررسی وجود نسخه پشتیبان با تابع checkDbIsValid که در اخر به ان می رسیم دیتابیس را با دیتابیس پشتیبان جایگزین میکند با استفاده از copyFile که در تابع قبلی هم برای کپی از ان استفاده کردیم.

importIntoDb:خب این تابع همانطور که از نامش پیداست برای وارد کردن فایل ها از نسخه پشتیبان است که با دستورات ان در مباحث sqlite اشنا شدیم.

checkDbIsValid:این تابع وظیفه بررسی دیتابیس را دارد که ایا دیتابیس معتبر است یا خیر.

copyFile:همانطور که قبل تر از ان استفاده کردیم این تابع عملیات کپی را انجام می دهد که بررسی دقیق ان از حوصله این بخش خارج است.

SdIsPresent:برای بررسی sd card از این تابع استفاده میکنیم.

حال که با بخش های مختلف این کلاس اشنا شدیم میتوانیم به راحتی از ان برای گرفتن بکاپ استفاده کنیم.

به پایان این اموزش رسیدیم امیدوارم  مفید بوده باشه

موفق باشید…

 

درباره نویسنده

دانشجو نرم افزار هستم به زبان های برنامه نویسی و اندروید علاقه مند هستم.

نظرها ( ۱۲ )

  1. ۴, مرداد , ۱۳۹۶ در ۱۰:۱۷ ب.ظ

    تشکر از آموزش خوبتان

  2. مهدی
    ۶, شهریور , ۱۳۹۶ در ۱۱:۴۹ ق.ظ

    سلام. کلاس DbAdapter که توی این کد استفاده شده چی هست؟ باید از جایی بگیرم؟ یا میشه import کرد؟ بنده از OrmLite استفاده میکنم و توی برنامه م همچین کلاسی ندارم. ممنون میشم راهنمایی کنید

    • محمد حسین جعفری پور
      ۶, شهریور , ۱۳۹۶ در ۱:۳۳ ب.ظ

      DbAdapter همان آداپتور دیتابیس است اگر آموزش های قبلی Sqlite را دنبال می کردید متوجه آن می شدید الان می توانید آن کلاس را همانند زیر ایجاد کنید.

      موفق باشید.

  3. ۲۳, آبان , ۱۳۹۶ در ۷:۴۷ ب.ظ

    سلام
    من در مورد آدرس دهی دیتابیس مشکل دارم مثلا این قسمت رو نمی دونم
    private static final File DATA_DIRECTORY_DATABASE =
    new File(Environment.getDataDirectory() +
    “/data/” + PACKAGE_NAME +
    “/databases/” + DATABASE_NAME );
    این قسمت PACKAGE_NAME رو از کجا باید بیارم ؟

    • ۲۴, آبان , ۱۳۹۶ در ۲:۱۳ ب.ظ

      سلام نام پکیجتونه ک جلوش هم برای مثال نوشتیم دیگه..ابتدای اکتیویتون نوشته شده.

  4. hamid
    ۱۰, بهمن , ۱۳۹۶ در ۱۲:۱۰ ب.ظ

    سلام ممنون از آموزش های خوبتون
    اگه بخواهیم اطلاعات موجود در یک جدول رو کپی کنیم داخل یه جدول دیگه چه باید کرد ؟
    تعداد و نام ستون ها در دوتا جدول یکی نیست.
    میخام به صورت انتخابی بگم مثلا ستون دوم از جدول مرجع را به ستون اول جدول جدید کپی کنه
    و در مواقعی هم لازمه که تو کپی کردن یه شرط هم بررسی بشه
    مثلا از جدول مرجع مواردی رو تو جدول جدید بریزه که سن افراد(ستون سوم) بالای ۵۰ باشه

    • محمد حسین جعفری پور
      ۱۱, بهمن , ۱۳۹۶ در ۹:۱۵ ق.ظ

      سلام
      ابتدا باید از دیتابیس اول خود یک query بگیرید که حاوی تمامی اطلاعات باشد بعد از آن باید مقدار هایی را که در query اول به دست آمده را درون یک متود برای insert یا update دیتابیس جدید هست قرار دهید.
      موفق باشید.

  5. ۲۷, اسفند , ۱۳۹۶ در ۵:۳۴ ب.ظ

    با سلام
    یه سوال :
    تفاوت دوتا تابع restoreDb و importIntoDb در این هست که وقتی restoreDb فراخوانی میشه اطلاعات فعلی دیتابیس از بین میره و فایل پشتیبان توی دیتابیس جایگزین میشه و با اجرای importIntoDb اطلاعات فعلی دیتابیس حفظ میشه و اطلاعات فایل جدید هم به اون اضافه میشه
    درسته ؟

  6. ۱, فروردین , ۱۳۹۷ در ۹:۱۴ ق.ظ

    سلام . سال نو مبارک
    امیدورام امسال سال خوبی رو داشته باشید و ساییتون همچنان مثل قبل فعال باشه و پر قدرت به کارتون ادامه بدید.
    یه سوال دیگه از این پست داشتم :
    در مورد متد importIntoDb :
    cursor.getColumnIndexOrThrow(“title”)
    cursor.getColumnIndexOrThrow(“timestamp”)
    مقادر فوق را میریزه داخل یه متغیر int. عبارت “title” و “timestamp” چی هست ؟ هر دو مربوط به عنوان ستون های جدول هست ؟
    بعد هم این دو مقدار داده شده به متد
    dbAdapter.createQuote(
    cursor.getString(titleColumn),
    cursor.getString(timestampColumn)
    )
    آرگومان اول نام ستون و آرگومان دوم محتوای ستون هست ؟
    اگه کلا یه مقدار در مورد این importIntoDb بیشتر توضیح بدین ممنون میشم
    با تشکر

    • محمد حسین جعفری پور
      ۴, فروردین , ۱۳۹۷ در ۳:۴۶ ب.ظ

      سلام و درود
      نام ستون title و timestamp زمان مربوط به کپی هست. زمانی که می جدول می خواهد ساخته شود اگر دقت کنید در متود create دو مقدار ورودی به آن ارسال می شود که یکی از آنها عنوان (title) و دیگری زمان یا timestamp است.
      موفق باشید.