اموزش sqlite در اندروید بخش دوم
سلام با ادامه اموزش های sqlite در اندروید با شما هستیم.در اموزش قبلی به بررسی دیتابیس پرداختیم همچنین ایجاد دیتابیس و ایجاد جدول و دادن اطلاعات به جدول را یاد گرفتیم.در این اموزش میخواهیم به گرفتن اطلاعات از جدول بپردازیم.اگر اموزش های قبلی را مطالعه نکردید حتما اول انهارو بخونید.
گرفتن اطلاعات از دیتابیس
در sqlite برای اینکه بتوانیم اطلاعات را از جدول بخوانیم از cursor استفاده میکنیم.به این صورت که همه اطلاعات را میریزم در cursor سپس از ان میخوانیم.پس در اینجا فهمیدیم که برای خواندن اطلاعات از جدول دو مرحله داریم.
برای مرحله اول که ریختن اطلاعات درون cursor هست دو حالت داریم.حالت اول با استفاده از نوشتن کوئری است که به شکل زیر انجام می شود:
1 | Cursor cr = mydb.query(table, columns, selection, selectionArgs, groupBy, having, orderBy, limit); |
خب در اینجا حالت کلی این دستور را میبینیم بخش اول یعنی table نام جدول ماست که در مثال قبلی ان را در متغییر tbname ریهتیم و بخش بعدی یعنی columns ستون های ما است.در این اموزش به بخش های دیگر ان بصورت گذرا میپردازیم و از این ها استفاده نمیکنیم اما اشنایی با ان ها در کار با دیتابیس بسیار میتواند مهم باشد:
selection: برای گذاشتن شرط بروی نتایج بکار میرود
selectionArgs:مقدار های شرطی selection را در یک ارایه باید مشخص کنیم در این پارامتر
groupBy:برای گروهبندی نتایج بکار میرود
having:یک نوع شرط روی نتایج میگذرد که نیاز به بررسی بیشتری دارد که در اینده به ان میپردازیم
orderBy:نتایج را به ترتیب مشخص شده میچیند
limit:نمایش نتایج را محدود میکند تا به میزان مشخص شده نمایش داده شود
توجه کنید در صورتی که این بخش ها null باشند تاثیری نمیگذارند به همین دلیل در این اموزش به صورت خلاصه بررسی کردیمشان.
به این موضوع هم دقت کنید که ستون ها باید به صورت ارایه تعریف شوند در اینجا:
1 | Cursor cr= mydb.query(tbname, new String[]{"id", "name", "age"}, null, null, null, null, null, null); |
حالت دیگر برای ریختن اطلاعات در cursor به شکل زیر است که البته نیاز به اشنایی بیشتری با مبحث sql دارد:
1 | Cursor cr = mydb.rawQuery("SELECT * FROM " + tbname, null); |
در اینجا با * که برای انتخاب همه استفاده می شود تمام اطلاعات را در cr ریختیم.خب حالا نوبت به مرحله بعدی یعنی گرفتن اطلاعات از cursor است امیدوارم که تا اینجا خسته نشده باشید.
ما میتوانیم با یک خلقه این اطلاعات را بگیریم به صورت زیر:
1 2 3 4 5 6 | while(cr.moveToNext()){ int id = cr.getInt(cr.getColumnIndex("id")); String name = cr.getString(cr.getColumnIndex("name")); int age= cr.getInt(cr.getColumnIndex("age")); myTextView.append("id: " + id + ", name: " + name + ", age: " + age); } |
در اینجا با یک حلقه while و به کمک دستور moveToNext تمام سطر هارا دونه دونه در متغییر هایمان ریختیم.در اخر در یک textView ان هارا نمایش دادیم.به نکات زیر توجه کنید:
نوع داده ای که از جدول میخواهید بگیرید مهم است و در بخش getInt و یا getString دقت کنید.
برای فهمیدن تعداد سطر ها از دستور زیر استفاده کنید:
1 | int num = cr.getCount(); |
به کلیدی که در بخش های قبلی دیدید مشخص کردیم دقت کنید که اشتباهی رخ ندهد.
بعد از پایان کارتان با cursor و همچنین دیتابیس ان را حتما ببندید با کد زیر:
1 2 | cr.close(); mydb.close(); |
تا ادامه اموزش های sqlite بدرود.
پایان.
دمتون گررررم، خیلی به کارم اومد خدا قوت?
خواهش می کنم موفق و موید باشید.
سلام. ممنون بابت آموزشتون.
لطفا کدهایی رو که مینویسید بگید که باید کجا قرار بگیرن. توی کلاس جدید یا توی کلاس Main Activity ؟
چون تازه شروع کردم به یادگیری اندروید کمی گیج میشم که این کدها رو کجا باید قرار بدم. ممنون
سلام
خواهش می کنم.
این بخشی از آموزش است کدنهایی رو باید در آخرین آموزش پیدا کنید لینک زیر را بررسی کنید (برای دسترسی به تمامی آموزش های در سایت واژه sqlite را جستجو کنید)
https://programchi.ir/2017/07/21/%d8%a7%d9%85%d9%88%d8%b2%d8%b4-sqlite-%d8%af%d8%b1-%d8%a7%d9%86%d8%af%d8%b1%d9%88%db%8c%d8%af-%d8%a8%d8%ae%d8%b4-%d9%be%db%8c%d8%b4%d8%b1%d9%81%d8%aa%d9%87/
مبحث بالا آموزش کامل است .
موفق باشید.
سلام اگربخواهیم تواین دستور از where استفاده کنیم چطور بنویسم؟ من هر طور می نویسم ارور میده
Cursor cr = mydb.rawQuery(“SELECT * FROM ” + tbname, null)
سلام از کد زیر استفاده کنید.
موفق باشید.
زحمت شما دستور like هم بگین
از کد زیر استفاده کنید.
موفق باشید.
متشکر
سلام من حدود ۶۰ عکس رو داخل drawableریخته بودم و با یه ارایه اونهارو طبق پوزیشن در listview قرار داده بودم که روی بعضی از گوشی ها ارور canvs میداد.
ارور:
canvas: trying to draw too large(111056400byte)bitmap.
فکر میکنم بخاطر اینه که از دیتابیس استفاده نکردم اون مشکل پیش اومده بود.
حالا میخوام راهنمایی کنید از کدوم روش دیتابیسsqlite رو بسازم و مثل قبل طبق پوزیشن اونهارو در listview قرار بدم.
ممنون میشم کمک کنید.
سلام پاسخ شما داده شد. موفق باشید.
سلام و عرض ادب ببخشید من میخوام از درون دیتا بیسم 5 تا فیلد بخونم بعد 5 تا رو نسون بدم وسه تا ادرس عکس هم از دیتابیس بخونه و عکس رو نمایش بده ممنون میشم کمکم کنید
آموزش هاتون خیلی روان هست. ممنون از شما