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

ورود

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

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

ورود

عضو شوید

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

دوره آموزش برنامه نویسی اندروید
قرار دادن دیتابیس در برنامه اندروید

قرار دادن دیتابیس در برنامه اندروید

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

اولین کاری که لازمه انجام بدیم این است که دیتابیس خود را اماده کنیم.برای اینکار ما از برنامه navicat استفاده میکنیم البته اصلا فرقی نداره که چه برنامه ای باشد مهم دیتابیس ما هستش.

دوستان حتما به مراحل انجام کار دقت کنید کوچک ترین اشتباهی ممکنه در برنامه مشکل ایجاد کنه:

لازمه که جدا از جدول های اصلی دیتابیستان یک جدول با نام android_metadata ایجاد کنید که یک ستون با نام locale و یک سطر با مقدار en_US داشته باشد در خودش.

بعد از اینکه کار دیتابیس تمام شد نوبت قرار دادن در برناممان میرسد.ما برای اینکار از کتابخانه SQLite Asset Helper استفاده میکنیم.این کتابخانه دیتابیس را به صورت zip قبول میکنه پس لازمه که ان را فشرده کنیم توجه کنید که حتما zip باشد.

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

خب حالا در برنامه مورد نظر در پوشه assets یک پوشه به نام databases میسازیم به شکل زیر:

در صورتی که فولدر assets را نداشتید مانند تصویر زیر ان را ایجاد کنید:

حالا باید کتابخانه ای که قبل تر گفتیم را در برنامه اضافه کنیم.برای اینکار ابتدا از اینجا ان را دانلود کنید.

حالا فایل jar رو در پوشه libs بریزید سپس روی کتابخانه راست کلیک کنید و Add as Library را انتخاب کنید و صبر کنید پروژه builid شود تا کتابخانه اضافه شود.

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

در اینجا ما با یک مثال ساده اموزش را کامل میکنیم. یک کلاس ایجاد میکنیم که در اینجا ما نام ان را MyDateBase قرار دادیم به صورت زیر:

همانطور که میبینید کلاسمان از SQLiteAssetHelper ارث بری شده است.سپس کدهایمان در mainActivity به صورت زیر میشوند:

در اینجا ستون name از جدول mytb در toast نمایش داده می شود.با دستورات دیگر هم قبل تر اشنا شدیم.امیدوارم اموزش مفید بوده باشه در صورت داشتن مشکل حتما ان را مطرح کنید

تا اموزش های بعدی بدرود.

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

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

نظرها ( ۴۳ )

  1. علی اکبر
    ۱۷, مرداد , ۱۳۹۶ در ۸:۲۸ ق.ظ

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

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

      بله آموزش آن رد Eclipse خیلی شبیه است یعنی هیچ فرق نمی کند در چه نوه IDE انجام شود کد در هردو IDE کار خواهد کرد.

      موفق و موید باشید.

  2. رضا
    ۱۸, مرداد , ۱۳۹۶ در ۴:۴۲ ب.ظ

    ینی دو ماه من دارم از انواع سایتا امتحان میکنم جواب نمیگیرم که نمیگیرم
    کوئری رو این شکلی کردم
    SELECT * FROM android_metadata
    و این خطا رو میگیرم
    Could not open database
    ممنون میشم کمکم کنید

  3. رضا
    ۱۸, مرداد , ۱۳۹۶ در ۷:۰۷ ب.ظ

    ینی واقعا دمت گرم
    جواب داد
    هر چی تشکر کنم کم گفتم بخدا دو ماه دارم میگردم از سایتای ایرانی و خارجی و فرا زمینی فراتر رفتم همشون باگ داشتن
    خیییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییییلی گلی

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

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

  4. ناشناس
    ۳, شهریور , ۱۳۹۶ در ۱۰:۳۶ ب.ظ

    سلام من مدت هاس دنبال این اموزش بودم هیج جا پیداش نمیکردم
    فقط یه سوال دارم که خیلی ممنون میشم پاسخ بدین
    اینکه طبق این روشی که شما گفتین ابتدا باید اطلاعات دیتابیس رو همراه با جدول هاش داخل چیزی مثل sqlite manager بنویسیم، بعد اون رو به پروژه شناسایی کنیم؟ ایا درست متوجه شدم؟

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

      سلام خواهش می کنم.
      بله باید با برنامه های مثل navicat و یا sqlite Manager دیتابیس را از قبل ایجاد کرده و سپس در برنامه قرار دهید .

  5. ناشناس
    ۷, شهریور , ۱۳۹۶ در ۸:۵۱ ب.ظ

    سلام
    من دقیقا طبق اموزش که دادین پیش رفتم و خطایی هم برنامه نداره اما وقتی اجراش میکنم برنامه فورس کلوز شده و بسته میشه به نظرتون باید چیکار کنم؟؟؟؟

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

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

    موفق باشید.

  7. ناشناس
    ۱۹, شهریور , ۱۳۹۶ در ۷:۱۷ ب.ظ

    سلام
    این کتابخونه ای که در این پروژه به کار رفته ینی کتابخونه sqlite_asset_helper دقیقا چه کاری رو برامون انجام میده؟؟
    وقتی این کتابخونه رو اد میکنیم چه ویژگی هایی در اختیارمون قرار داده میشه؟؟؟؟؟

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

      سلام
      یک اینکه از SQLiteAssetHelper ارث بری یا همان extend گرفته شده است و دوم برای اینکه بیایم دیتابیس را راحت تر از پوشه assets بخونیم باید از این کتاب خانه استفاده کنیم سوم به تازگی آپدیتی که صورت گرفته لازم نیست دیگر دیتابیس را zip کنید به همان شکل می توانید در پوشه asstes قرار دهید چهارم می توانید فایل دیتابیس را با فرمت gzip فشرده کنید و در برنامه قرار دهید ! پنجم فراخونی آن بسیار ساده است
      در صورتی که دلایل کافی نبود بفرمایید بیشتر توضیح دهم .

      موفق و موید باشید.

  8. ناشناس
    ۲, مهر , ۱۳۹۶ در ۵:۱۹ ب.ظ

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

  9. امیر
    ۲۵, مهر , ۱۳۹۶ در ۱۲:۵۱ ب.ظ

    سلام و خسته نباشید ممنون و سپاس از آموزشهای مفیدتون
    یه سوالی که پیش اومده این هستش که ما علاوه بر سطر و ستونی که خودمون ایجاد میکنیم ، باید یه ستون هم به locale و سطر en_US باشه؟

  10. محمد
    ۲۰, آبان , ۱۳۹۶ در ۱۰:۰۲ ب.ظ

    با سلام و خسته نباشید وتشکر بابت سایت خوبی که دارید
    باید بگم در خط ۱۳ کلاس MyDateBase
    مشکل وجود داره باید به صورت زیر نوسته بشه

    ;”private static final String DATABASE_NAME = “mydbtestt
    و آخرش باید db نوشته بشه و دات(.) لازم نیست

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

      ممنون محمد جان ولی مشکلی نداره و کد امتحان شده درست کار میکنه.

  11. جمشید
    ۱, دی , ۱۳۹۶ در ۹:۲۵ ب.ظ

    سلام خسته نباشید میخواستم بگم که ,یک اسلاید ایجاد کردم دقیقا مثل دی جی کالا و کافه بازار اما نمیدونم چه جوری با پایگاه داده local host ارتباطش بدم و تصاویر رو چجوری به صورت آنلاین بگیره.هیچی ازش نمیدونم

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

      سلام و درود
      باید آیپی local را دستور ipconfig/all در cmd به دست بیارید و سپس آدرس آیپی را از آنجا بدهید.

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

    سلام
    من هرکاری میکنم درس نمیشه، فک کنم دیتابیس رو باز نمیکنه
    هم برنامه ک باز میشه سریع بسته میشه و پیغام unfortunately app has stopped میده
    چیکارشه؟

    • ۶, بهمن , ۱۳۹۶ در ۴:۱۶ ب.ظ

      سلام لطفا پیغام خطای برنامه رو بفرستید از android monitor…و حتما در نوشتن کوئری ها به فاصله ها دقت کنید.

    • ابراهیم
      ۱۲, بهمن , ۱۳۹۶ در ۹:۳۹ ب.ظ

      کوئری رو درست کن SELECT locale FROM android_metadata

  13. DevilMayCry
    ۱۹, بهمن , ۱۳۹۶ در ۱۱:۳۶ ق.ظ

    سلام .. اقا دستتون درد نکنه من این آموزش کامل واسه من کارکرد …
    فقط من میخوام اطلاعاتمو طبق چیزی که جست و جو شده از دیتابیس بخونه بریزه توی یه custom list view
    آموزش های سایتم مطالعه کردم … گفته بودید مابقیش مثه همه …
    ولی من چطوری میتونم اطلاعاتو از این طریق بریزم تو لیست؟

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

      سلام شما باید یک query بنویسید که این کار را انجام دهد custom list view چیز خاصی نیست فقط یک Constructor خاص ممکنه داشته باشه که شما بعد از query گرفتن یا مقادیر رو به custom list view میدید یا یک Model دارید که مقادیر را به آن میدهید سپس به Constructor پاس میدهد برای قرار دادن در لیست هم آموزش در سایت زیاده همینطور list view سفارشی یا custom نیز آموزش داده شده است.
      موفق باشید.

  14. سعید
    ۳۰, بهمن , ۱۳۹۶ در ۱۲:۴۳ ب.ظ

    سلام ، نحوه تغییر دادن فیلدهای درون دیتابیس تو این کتابخونه (SQLite Asset Helper) چجوری امکان پذیره ، ( من از این کتابخونه استفاده کردم و یه لیست ویو سفارشی ساختم که اطلاعات رو از دیتابیس داخلش نشون میده حالا من داخل لیست ویوم یه ایمیج ویو دارم که میخوام با کلیلک روی هرکدوم از ایمیج ویو های مربوط به لیستم یه فیلد مورد نظر تو جدول دیتابیسم مقدارش تغییر کنه و دیتابیس و لیست ویو بعد از کلیلک فورا رفرش بشه و مقادیر جدید اعمال بشه) امیدوارم منظورم رو خوب رسونده باشم حالا اگه امکانش هست لطفا توضیح بدید و یه نمونه از کد مربوطش بذارید . ممنون میشم سریع تر جواب بدید. سپاس فراوان .

  15. ۱۴, اسفند , ۱۳۹۶ در ۱۱:۲۰ ب.ظ

    سلام و خسته نباشد ؛
    من از این شیوه و کتابخونه (SQLite Asset Helper) استفاده میکنم و همه چیز اوکیه خوشبختانه ، ولی یه سوال خیلی حیاتی داشتم اونم اینه که چجوری به دیتابیسم تو این روش ، امنیت (کدگذاری یا هر چیز دیگه ای که از دیتابیسم محافظت کنه ) بدم .
    ممنون میشم اگه بطور دقیق راهنمایی کنید .

  16. sam
    ۲۴, اردیبهشت , ۱۳۹۷ در ۵:۵۵ ب.ظ

    سلام
    دوستان کسی می دونه چطور باید از این کتابخانه در کوتلین استفاده کرد؟
    کدهاشو تبدیل کردم و ظاهرن همه چیز درسته ولی ارور میده که فایل دیتابیس باز نمی شه

    • MohammadReza Hosseini
      ۱, آبان , ۱۳۹۷ در ۴:۰۸ ب.ظ

      سلام
      عزیزم اون کوتلین نیست کاتلین میگن. با کوتلت اشتباه نگیری صلوات.

  17. احسان
    ۸, خرداد , ۱۳۹۷ در ۱:۳۵ ب.ظ

    سلام و خسته نباشید خدمت دوستان عزیز
    بنده کتابخونه SQLiteAssetsHelper رو دان کردم ولی چون تو مسیر پوشه app پوشه Libs نبود، کتابخونه رو از سایت github گرفتم و تو قسمت Buildgradle جای کتابخونه ها کپی کردم و گذاشتم تا سینک بشه…
    بعد ازین کار کدهام رو نوشتم ولی برنامه کرش میکرد. و میکفت که نمیتونه دیتابیس رو باز کنه… یعنی دیتابیس رو نشناخته بود…
    و به کد زیر گیر میداد:
    SQLiteDatabase sqLiteDatabase = this.getReadableDatabase();

    و خطایی رو با عنوان زیر Log میکنه:
    Caused by: android.database.sqlite.SQLiteCantOpenDatabaseException: unknown error (code 14): Could not open database

    اگه امکانش هست راهنماییم کنید
    ممنون

  18. مجتبی
    ۱۹, خرداد , ۱۳۹۷ در ۲:۳۱ ق.ظ

    سلام ممنون از آموزش

    یعنی الان این کتابخانه که در این ادرس هم هست
    https://github.com/jgilfelt/android-sqlite-asset-helper

    دقیقا کدهایی که قبلا در هنگام ارث بری از SqliteOpenHelper استفاده می شده رو میشه استفاده کرد؟
    فقط میاد دیتابیس رو از پوشه assets میخونه؟؟؟

    به عبارتی دیگه اگه ما از این لایبرری استفاده کنیم و بیاییم به صورت عادی یه کوئری بزنیم و همه اطلاعات رو select کنیم میاد دیتاهایی که از قبل در دیتابیس ریختیم رو نمایش میده؟؟

    درست متوجه شدم؟

  19. ۱۶, تیر , ۱۳۹۷ در ۱:۲۹ ق.ظ

    سلام. ممنون از آموزش خوبتون..
    فرض کنید من از این کتاب خونه استفاده کردم. حالا تو نسخه جدید برنامه میخوام یه دیتابیس دیگه که با دیتابیس قبلی یه کم تغییر کرده، قرار بدم. وقتی میام مقدار
    DATABASE_VERSION
    رو تغییر میدم، برنامه ارور میده. چجوری میتونم به کتاب خونه بفهمونم که دیتابیس جدید رو جایگزین قبلی بکنه؟؟؟

    • محمد حسین جعفری پور
      ۱۶, تیر , ۱۳۹۷ در ۲:۰۰ ق.ظ

      سلام
      این کار اتوماتیک انجام میشه فقط کافیه دیتابیس ورژن بخوره همین یعنی مثلا در اولین بار ورژن یک هست دفعه دوم ورژن دو شود کلا دیتابیس recreate می شود.
      البته اگر کد رو قبلا اضافه کرده باشید بهش.

      موفق باشید.

      • ۱۶, تیر , ۱۳۹۷ در ۲:۰۵ ب.ظ

        ممنون از پاسخ گویی سریعتون
        این کد که گفتید هم بهش اضافه کردم باز همون خطا رو میده.
        وقتی میخوام از دیتابیس استفاده کنم
        SQLiteDataBase db = dbHelper.getReadableDataBase();
        خطا میده :
        Can’t upgrade read-only database from version 1 to 2

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

          چون دیتابیس شما readonly هست باید با استفاده از متد زیر آن را مجبور کنید تا آپدیت شود.

          موفق باشید.

  20. mrz
    ۲, فروردین , ۱۳۹۸ در ۴:۴۹ ب.ظ

    سلام به این خط میرسه ارور میده final SQLiteDatabase database = mydb.getReadableDatabase(); میگه نمیتونه باز کنه دیتابیس رو . .
    چیکار کنم .

    • ۷, فروردین , ۱۳۹۸ در ۲:۴۱ ب.ظ

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

  21. ۲۰, خرداد , ۱۳۹۸ در ۱۰:۱۹ ب.ظ

    سلام ، یه سوال بسیار مهم داشتم لطفا کمک کنید :
    تو برنامم از این کتابخونه استفاده میکنم و همچی اوکیه ، برای آپدیت دیتابیس هم مشکلی نیست و طبق مستندات گیت هاب کتابخونه عمل میکنم و آپدیت میشه
    ;private static final int DATABASE_VERSION = 2
    assets/databases/_upgrade_-.sql
    اما مشکل اینجاس که الان که مثلا آپدیت دیتابیس ورژن ۱ به ۲ دادم اگه کسی برنامه رو جدیدا نصب کنه آپدیت ۲ اعمال نمیشه !!!
    از این کدم استفاده کردم ولی بازم نشد : ;(setForcedUpgradeVersion(2
    در کل باید حتما به ترتیب پیشرفت تا آپدیت ها اعمال بشن مثلا برنامه که اولین بار نصب میشه بعدش آپدیت ۲ رو که بدم ،دوباره برنامه نصب شه آپدیت اعمال میشه ، برای آپدیت ۳ هم باید برنامه با آپدیت۲ موجود باشه تا اعمال شه و ……
    اما اگه یکی بخواد جدیدا برنامه رو نصب کنه هیچ کدوم از آپدیت ها اعمال نمیشه و همون برنامه اولیه بدون آپدیت میاد !!!
    چکار باید کرد خیلی مهمه برام لطفا کمک کنید . سپاس

  22. Afshin
    ۳, تیر , ۱۳۹۸ در ۶:۴۶ ق.ظ

    سلام . ببخشید این روش برای عملیات درج و حذف و آپدیت رکوردها جواب میده؟ مگه asset folder فقط خواندنی نیست؟