میخوای وارد بازار کار بشی و محصولات خودت رو بفرشی همین الان ثبت نام کن
0

SQLite و Android

با سلام خدمت دوستان عزیز  در آموزش قصد داریم در مورد SQLite چیست و در SQLite در Android مطالبی را عنوان کنیم

SQLite یک دیتابیس کد باز ( Open Source ) بوده، از امکانات و ویژگی های متعارف دیتابیس های رابطی نظیر ساختار نگارشی (SQL(syntax تراکنش ها ( transactions ) و دستورات آماده پشتیبانی می کند. دیتابیس مزبور در زمان اجرای اپلیکیشن حافظه ی کمی را مصرف می کند (حدودا ۲۵۰ کیلوبایت). این امر سبب شده که SQLite گزینه ی خوبی برای جاسازی در سایر runtime ها تلقی شود.

SQLite از انواع داده ای همچون TEXT  (معادل String در جاوا)، INTEGER ( معادل long در جاوا) و  REAL ( مشابه double در جاوا ) پشتیبانی می کند. سایر نوع های داده ای می بایست قبل از قابلیت ذخیره در دیتابیس، به یکی از فیلدهای نام برده تبدیل شوند. SQLite به صورت خودکار قابلیت اعتبارسنجی انواع داده ای درج شده در ستون ها را ندارد. به عنوان مثال، ممکن است مقداری از نوع integer را در ستون رشته ای ذخیره کرده یا بالعکس. خواهید دید که دیتابیس مذکور از شما ایراد نخواهد گرفت.

 


 SQLite در اندروید

SQLite تقریبا در تمامی دستگاه های اندروید جاسازی شده است. برای استفاده از این دیتابیس، توسعه دهنده نیازی به نصب و تنظیم آن ندارد. مدیریت ( admin) دیتابیس نیز به صورت خودکار توسط خود اندروید انجام می شود.

کافی است دستورات SQL ایجاد و آپدیت دیتابیس را تعریف نموده و فراخوانی کنید. پس از آن باقی عملیات لازم را خود محیط و بستر اجرای اندروید ( platform ) به دست می گیرد.

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

دیتابیس اپلیکیشن به صورت خودکار در آدرس DATA/data/APP_NAME/databases/FILENAME ذخیره می شود.

بخش های آدرس فوق بر اساس قوانین و قواعد خاصی ساخته می شوند. DATA آدرس یا مسیری است که متد ()Environment.getDataDirectory برمی گرداند. APP_NAME اسم اپلیکیشن شما است
و در پایان،
FILENAME اسمی است که در کد اپلیکیشن خود برای دیتابیس تعریف می کنید.


Package ها

پکیج android.database تمامی اطلاعات ضروری برای کار با دیتابیس را شامل می شود. پکیج android.database.sqlite تمامی کلاس های ویژه ی SQLite را دربرمی گیرد.


ایجاد و آپدیت دیتابیس با SQLiteOpenHelpe

به منظور ایجاد و ارتقا دیتابیس در اپلیکیشن اندرویدی خود، لازم است یک کلاس فرزند (subclass) از SQLiteOpenHelper ایجاد نمایید. سپس در تابع سازنده (constructor ) کلاس فرزند، متد ()super از SQLiteOpenHelper را فراخوانی نموده و اسم و ورژن دیتابیس را مشخص نمایید.

در این کلاس می بایست پیاده سازی متدهای زیر را جهت ایجاد و آپدیت دیتابیس خود، بازنویسی ( override ) نمایید

onCreate() چارچوب نرم افزاری اندروید ( framework ) این متد را زمانی صدا می زند که می خواهید به دیتابس دسترسی داشته باشید، اما دیتابیس هنوز ایجاد نشده است.

onUpgrade() هنگامی فراخوانی می شود که ورژن دیتابیس در کد اپلیکیشن ارتقا یافته باشد. این متد به شما اجازه می دهد تا schema دیتابیس جاری را بروز رسانی نموده یا دیتابیس جاری را حذف کنید و سپس آن را مجددا با متد () onCreate ایجاد نمایید.

هر دو متد یک آبجکت SQLiteDatabase به عنوان پارامتر می گیرند. این آبجکت جاوا در واقع همان دیتابیس است.

کلاس SQLiteOpenHelper  با ارائه ی دو متد getReadableDatabase() و getWriteableDatabase() دسترسی به آبجکت SQLiteDatabase را به ترتیب به صورت فقط خواندنی و نوشتنی برای توسعه دهنده فراهم می آورد.

جداول دیتابیس بایستی id_ را به عنوان کلید اصلی ( primary key ) بکار ببرند. بسیاری از رفتارها و توابع اندروید از این استاندارد پیروی می کنند.

 

نکته: توصیه می شود برای هر کلاس یک جدول جداگانه ایجاد نمایید. این کلاس ها متدهای استاتیک () onCreate و () onUpgrade را تعریف می کند. توابع مذکور در متدهای متناظر داخل SQLiteOpenHelper فراخوانی می شوند. با پیروی از این روش، حتی اگر تعداد جداول دیتابیس بسیار بالا باشد، پیاده سازی SQLiteOpenHelper به راحتی قابل دسترسی و خواندن خواهد بود.

 


کلاس پدر SQLiteDatabas

SQLiteDatabase کلاس پایه ای است که برای کار با دیتابیس می بایست از آن ارث بری کنید. این کلاس متدهایی را جهت بازکردن، کوئری گرفتن، آپدیت کردن و بستن دیتابیس در اختیار توسعه دهنده قرار می دهد. به عبارت دقیق تر، SQLiteDatabase سه متد بسیار مهم ()،insert () updateو () delete را ارائه می دهد.

علاوه بر آن، کلاس نام برده با ارائه ی متد () execSQL این امکان را برای برنامه نویس فراهم کرده تا دستور SQL را به صورت مستقیم اجرا کند.

آبجکت ContentValues جفت های کلید/مقدار ( key/value) را ایجاد می کنند. Key همان id یا شناسه ی ستون جدول است و value نیز محتوا یا مقدار رکورد جدول در این ستون می باشد. از این آبجکت برای درج مقدار جدید و آپدیت مقادیر جاری دیتابیس استفاده می شود.

جهت ایجاد query ها و درخواست داده از دیتابیس می توانید به دو روش اقدام کنید: .

۱- می توانید یکی از دو متد () rawQuery و () query را فراخوانی نمایید .

۲- از کلاس SQLiteQueryBuilder استفاده کنید.

() rawQuery یک دستور SQL را مستقیما به عنوان ورودی می پذیرد.
() query یک interface ساخت یافته و الگوی پیاده سازی آماده برای تعریف دستور SQL ارائه می دهد.
SQLiteQueryBuilder یک کلاس کمکی ( )Convenience است که این امکان را به شما می دهد تا query های sql را به راحتی بسازید.


مثالی از پیاده سازی متد ()rawQuery

نمونه کد زیر متد () rawQuery را فراخوانی می کند.

 

Cursor cursor = getReadableDatabase().
rawQuery("select * from todo where _id = ?", new String[] { id });

مثالی از پیاده سازی متد ()query

نمونه کد زیر متد () query را فراخوانی می کند.

 

return database.query(DATABASE_TABLE,
new String[] { KEY_ROWID, KEY_CATEGORY, KEY_SUMMARY, KEY_DESCRIPTION },
null, null, null, null, null);

آبجکت Cursor

کوئری در خروجی یک آبجکت Cursor برمی گرداند. Cursor همان نتیجه ی کوئری و سطرهای واکشی شده از دیتابیس است و اساسا به یک سطر از نتیجه ی کوئری اشاره دارد. این روش بازیابی اطلاعات به اندروید اجازه می دهد تا نتایج کوئری را به راحتی buffer کند چرا که در این صورت سیستم دیگری نیازی به بارگذاری تمامی داده ها در حافظه ندارد.

برای بدست آوردن تعداد المان های کوئری خروجی می توانید متد () getCount را بکار ببرید.

به منظور حرکت بین سطرهای فردی، می توانید () moveToFirst و () moveToNext را فراخوانی نمایید. با استفاده از متد () isAfterLast می توانید بررسی کنید آیا به انتهای نتیجه ی کوئری رسیده اید یا خیر.

Cursor مجموعه متدهای ( )typed وابسته به نوع ()* get را در اختیار توسعه دهنده قرار می دهد. جهت دسترسی به getString(columnIndex) ،getLong(columnIndex) از جمله می توان به مقادیر و داده های ستون با توجه به اندیس کنونی نتیجه اشاره کرد.

(columnIndex)getString برای بازیابی داده از نوع رشته و  getLong(columnIndex) برای واکشی داده هایی از نوع Long استفاده می شود. پارامتر  “columnIndex” همان طور که از نامش پیدا است، شماره ی مکان قرار گیری و اندیس ستون مورد درخواست می باشد که داده را بر اساس آن استخراج می کند.

Cursor همچنین متدی به نام  getColumnIndexOrThrow(String) را ارائه می دهد. این متد اسم ستون را به عنوان ورودی گرفته و در خروجی شماره ی مکان قرار گیری ستون را برمی گرداند. لازم به ذکر است که آبجکت Cursor را می بایست با فراخوانی متد () close ببندید.

 


ListActivity ها و ListView ها و SimpleCursorAdapter

ListView ها آبجکت های view ای هستند که لیستی از المان ها را برای کاربر به نمایش می گذارند.
ListActivitiy ها نیز activity های ویژه ای هستند که استفاده از ListView ها را آسان تر می سازند.
برای کار با دیتابیس ها و ListView ها می توانید از SimpleCursorAdapter استفاده نمایید.
SimpleCursorAdapter به شما این امکان را می دهد تا برای هر سطر از ListView ها یک layout تنظیم نمایید.
شما بایستی آرایه ای تعریف کنید که دربردارنده ی اسم ستون ها می باشد و سپس آرایه ی دیگری جهت نگهداری ID و شناسه ی View هایی که باید با داده پر شوند ایجاد نمایید.
کلاس SimpleCursorAdapter ستون ها را بر اساس
Cursor ارسالی، به view ها نگاشت می کند.
جهت دسترسی به Cursor می بایست کلاس Loader را بکار ببرید.


امیدواریم آموزش SQLite و Android نیز برای شما مفید واقع شده باشد و ادامه آموزش برنامه نویسی اندروید رو دنبال کنید . برای مطالعه پست‌ها بیشتر ، ما را در مدرسه کدنویسی تلگرام  و یا در تی جوان اینستاگرام دنبال کنید.

نظراتتون رو زیر همین پست با ما به اشتراک بگذارید.
ارسال دیدگاه

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

×

سلام کاربر عزیز

هر سوالی دارید در این بخش هستیم تا شما رو راهنمائی کنیم

روی لوگومون کلیک کنید

× چطور میتونم کمکتون کنم؟