-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
ali-star
دوستان کسی نمیدونه در این روش چگونه اطلاعات رو به صورت راندوم از دیتابیس بگیریم؟
مثلا من 5 تا داده دارم و میخوام با با کلیک بر روی دکمه یکی از این داده ها توی یک TextView نمایش داده بشه.:متفکر:
این رندوم گرفتن اطلاعات دیگه از سمت دیتابیس نیست
شما باید 5 تا داده رو با cursor بگیرید ( select ) کنید و از دستور رندوم استفاده کنید و با تولید یک عدد بین صفر و تعداد رکوردها، اون داده رندوم رو برگردونید
Cursor c = your select query ...
Random r = new Random();
int x = r.nextInt(c.getCount());
c.moveToPosition(x);
textview.setText(c.getString(c.getColumnIndex("nam e")));
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
سلام
چند تا احتمال وجود داره، یکی اینکه شما دارید یک عمل اجرایی انجام میدین درحالی که دیتابیستون رو از نوع readable گرفتید، پس اگر میخواین کاری روی دیتابیس اجرا بشه باید writable باشه
احتمال دیگه اینکه شما قبل از مقدار دادن متغیر mydb تون MyDatabase رو مقدار ندادین ( MyDataBase = new MyDatabase(context); )
احتمالات دیگه هم میشه در نظر گرفت ولی باید پیام خطایی که میده رو بذارید، شاید کلا کوئری شما مشکل داره
سلام. کل کدی که من نوشتم این هست :
private MyDatabase MyData;
private SQLiteDatabase mydb;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
MyData = new MyDatabase(this);
mydb = MyData.getWritableDatabase();
}
ضمن اینکه دیتابیس رو در فولدری assets و در پوشه databases قرار داده ام. با نام test.db.zip
این هم کلاس MyDatabse هست :
public class MyDatabase extends SQLiteAssetHelper{
private static final String DATABASE_NAME = "test.db";
private static final int DATABASE_VERSION = 1;
public MyDatabase (Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
}
اما اروری که میده اینه :
unfortunately, mydbs has stopped
ممنونم.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
دوست عزیز لطفا log خطا رو بذارید تا بتونم راهنمایی کنم
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
دوست عزيز نام فايلت test.db.zip هست چطوري ميخواي فايل test.db رو باز کني ؟
نام فايلت رو به test.db تغيير نام بده بعد دوباره تست بزن
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
saeed_g21
دوست عزيز نام فايلت test.db.zip هست چطوري ميخواي فايل test.db رو باز کني ؟
نام فايلت رو به test.db تغيير نام بده بعد دوباره تست بزن
نه اسم فایل باید همینطور باشه، چون دیتابیس باید به صورت zip در بیاد
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
نه اسم فایل باید همینطور باشه، چون دیتابیس باید به صورت zip در بیاد
اما اسم فایل رو که تغییر دادم کار کرد!!!!!
من هم از همین تعجب کردم. شما فرمودید که نباید اسم تغییر کنه اما ...
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
davoodi
اما اسم فایل رو که تغییر دادم کار کرد!!!!!
من هم از همین تعجب کردم. شما فرمودید که نباید اسم تغییر کنه اما ...
احتمالا شما بعد از اینکه zip کردید دوباره یک .zip هم اضافه کردین :لبخند:
منظور من از داشتن .zip همون پسوند فایل zip بود که نباید حذف بشه و باید باشه ( یعنی نمایش اسم توی ویندوز test.db هست اما نمایش توی اکلیپس test.db.zip )
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
احتمالا شما بعد از اینکه zip کردید دوباره یک .zip هم اضافه کردین :لبخند:
منظور من از داشتن .zip همون پسوند فایل zip بود که نباید حذف بشه و باید باشه ( یعنی نمایش اسم توی ویندوز test.db هست اما نمایش توی اکلیپس test.db.zip )
ظاهرا اینطوری بوده :لبخند:.
ممنون از راهنماییتون.
شما انسان بزرگواری هستید که به این سادگی اطلاعاتتون رو در اختیار همگان قرار میدید.:تشویق:
موفق باشید.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام دوستان
چطوری میتونیم همزمان از همه تیبل ها اطلاعات رو بگیریم.
مثلا من دیتابیسم 5 تا تیبل داره و میخوام همه اطلاعات او 5 تیبل توی listView نمایش داده بشه؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
ali-star
سلام دوستان
چطوری میتونیم همزمان از همه تیبل ها اطلاعات رو بگیریم.
مثلا من دیتابیسم 5 تا تیبل داره و میخوام همه اطلاعات او 5 تیبل توی listView نمایش داده بشه؟
اینکه چطوری توی لیست ویو نشون بدیم رو نمیدونم چون من تازه واردم اما همونطوری که استاد عزیز گفتن برای گرفتن اطلاعات از دیتابیس باید از دستورات زیر استفاده کنید :
mydb= MyData.getReadableDatabase();
Cursor cursor= mydb.rawQuery("select * from db", null);
cursor.moveToFirst();
String txt= cursor.getString(cursor.getColumnIndex("name"));
موفق باشید.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
باسلام وخسته نباشین
( من مبتدی هستم)از مطلب مفیدتون واقعا متشکرم چون من چندماه است که با این مشکل روبرو هستم وتا حدی مشکل حل شد حالا من در برنامه ام از جستجو استفاده کرده ام به این شکل که صفحه ای را کاربر باز میکند که دارای چند فیلد است با توجه به فیلدهایی که کاربر پر میکند و دیتابیس برنامه باید کار جستجو را اغاز کند وسپس نتیجه کار را به کاربر در صفحه دیگر نمایش دهد حال برای این کار چه طوری باید با این دیتابیس کار کنم؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
ali-star
سلام دوستان
چطوری میتونیم همزمان از همه تیبل ها اطلاعات رو بگیریم.
مثلا من دیتابیسم 5 تا تیبل داره و میخوام همه اطلاعات او 5 تیبل توی listView نمایش داده بشه؟
شما در هر زمان میتونید اطلاعات یک تیبل رو بخونید، یعنی نمیشه با یک کوئری 5 تا تیبل رو بگیرید
برای کاری که شما میخواین، باید اطلاعات هر تیبل رو یکی یکی بگیرید و توی آرایه یا لیست بریزید و اون رو به لیست آداپتر بفرستید
یعنی یک بار برای تیبل اول کوئری مینویسید و اطلاعاتش رو داخل آرایه میریزید، بعد باز برای هر تیبل این عملیات رو تکرار میکنین
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
nadia poorakbar
باسلام وخسته نباشین
( من مبتدی هستم)از مطلب مفیدتون واقعا متشکرم چون من چندماه است که با این مشکل روبرو هستم وتا حدی مشکل حل شد حالا من در برنامه ام از جستجو استفاده کرده ام به این شکل که صفحه ای را کاربر باز میکند که دارای چند فیلد است با توجه به فیلدهایی که کاربر پر میکند و دیتابیس برنامه باید کار جستجو را اغاز کند وسپس نتیجه کار را به کاربر در صفحه دیگر نمایش دهد حال برای این کار چه طوری باید با این دیتابیس کار کنم؟
سلام
شما برای جستجو مسلما باید از کوئری select استفاده کنید اما باید براش شرط بذارید
مثلا بگید سطری رو select کن که فیلد اسم اون برابر "حجت" باشه
شرط رو با where مینویسیم
select name,family,tell from Table where name = 'حجت'
این کوئری رو دقیقا مثل کوئری های دیگه استفاده میکنید، هیچ فرقی ندارن
شما ارتباط با دیتابیس رو یاد گرفتین، دیگه از اینجا به بعد همه چیز به SQL برمیگرده، یعنی شما اگه میخواین بهترین عملکرد رو توی دیتابیس داشته باشین، باید دستورات SQL رو یاد بگیرید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
باتشکر از جواب شما فقط ببخشید اگر بجای حجت بخواهیم فیلدی که کاربر وارد کرده را قرار بدهیم ارتباطی به دیتابیس نداره (در صورت امکان یک نمونه ارایه دهید)
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
nadia poorakbar
باتشکر از جواب شما فقط ببخشید اگر بجای حجت بخواهیم فیلدی که کاربر وارد کرده را قرار بدهیم ارتباطی به دیتابیس نداره (در صورت امکان یک نمونه ارایه دهید)
چشم ایشالا تا فردا من یک نمونه جستجو در دیتابیس میذارم
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام.
استاد لطفا برای کار با SQLite یک نرم افزار خوب و روان معرفی کنید.
من بصورت دستی فایل ها رو آماده میکردم اما نمیدونم چرا از دیتابیسم داره ایراد میگیره همش.
ممنونم.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
افزونه SQLite Manager برای FireFox میتونه بهترین گزینه باشه.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
هم افزونه ای که دوستمون معرفی کردن، هم نرم افزار SQLite Database browser کار رو با دیتابیس آسون میکنه
البته وارد کردن اطلاعات به هرحال به صورت دستی هست ( به صورت کوئری یا اینکه از توی جدول ها )، مگر اینکه تبدیل دیتابیس آماده باشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
ali-star
افزونه SQLite Manager برای FireFox میتونه بهترین گزینه باشه.
من با همین افزونه هم دیتابیس ساختم.
بعد پسوندش رو به .db تغییر دادم.
بعد هم زیپش کردم.
اما وارد پوشه databases که میکنم برنامه پیام خطا میده و بسته میشه.
میشه راهنمایی کنید که کجای کارم اشتباه است ؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من فشردش نکرم مستقیم اضافه کردم اون هم با پسوند sqlite کار کرد.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
poorman
شما در هر زمان میتونید اطلاعات یک تیبل رو بخونید، یعنی نمیشه با یک کوئری 5 تا تیبل رو بگیرید
برای کاری که شما میخواین، باید اطلاعات هر تیبل رو یکی یکی بگیرید و توی آرایه یا لیست بریزید و اون رو به لیست آداپتر بفرستید
یعنی یک بار برای تیبل اول کوئری مینویسید و اطلاعاتش رو داخل آرایه میریزید، بعد باز برای هر تیبل این عملیات رو تکرار میکنین
میشه با کد توضیح بدید؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
دوستان لطفا منو راهنمایی کنید.
من با استفاده از برنامه SQLite Studio دیتابیس مورد نظرم رو درست کردم.
و خروجی .sql هم گرفتم.
الان برای اینکه بتونم ازش در اندروید استفاده کنم باید چطوری پسوندش رو به .db تغییر بدم ؟
پسوند .sqlite هم نمیدونم چرا اما یه وقتایی کار میکنه یه وفتایی هم اصلا جواب نمیده و برنامه ارور میدهو
ممنونم.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
ali-star
میشه با کد توضیح بدید؟
توضیح خیلی واضحه که دیگه !!!
یک بار میگید cursor = mydb.rawQuery("select * from table1"); و اطلاعات رو ازش میخونید و توی آرایه میریزید
بعدش باز دوباره میگید cursor = mydb.rawQuery("select * from table2"); و اطلاعات رو به آرایه اضافه میکنید
و به همین ترتیب برای بقیه تیبل ها ...
شرمنده چون من وقت ندارم یک نمونه کامل بذارم، شما لطف کنید طبق همون اصول کار با دیتابیس که توی پست اول همین تاپیک گفتم کار کنید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
davoodi
دوستان لطفا منو راهنمایی کنید.
من با استفاده از برنامه SQLite Studio دیتابیس مورد نظرم رو درست کردم.
و خروجی .sql هم گرفتم.
الان برای اینکه بتونم ازش در اندروید استفاده کنم باید چطوری پسوندش رو به .db تغییر بدم ؟
پسوند .sqlite هم نمیدونم چرا اما یه وقتایی کار میکنه یه وفتایی هم اصلا جواب نمیده و برنامه ارور میدهو
ممنونم.
شما اگر میخواین با لایبری که آموزشش رو قرار دادم کار کنید باید دیتابیس با پسوند db ذخیره بشه و بعد زیپ بشه
من پیشنهاد میکنم از نرم افزار SQLite Database Browser استفاده کنید، توی این نرم افزار بعد از ساخت به راحتی دیتابیس رو ذخیره میکنید
لازم نیست خروجی بگیرید، فقط ذخیره کنید با پسوند .db
اگر هم فایلتون پسوند نداره خودتون یک .db بهش اضافه کنید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
زمانی که در SQLite Database Browser دیتابیس مثلا در درایو c ایجاد کردیم
حالا در برنامه اندروید چطور این مسیر بدیم؟
private static String DBNAME = "PERSONS";
یا زمانی که برنامه در تبلت ریختیم این دیتابیس از کجا میخواد بخونه؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
sara_traveler
زمانی که در SQLite Database Browser دیتابیس مثلا در درایو c ایجاد کردیم
حالا در برنامه اندروید چطور این مسیر بدیم؟
private static String DBNAME = "PERSONS";
یا زمانی که برنامه در تبلت ریختیم این دیتابیس از کجا میخواد بخونه؟
دوست عزیز دیتابیس باید در مسیر assets/databases قرار داده بشه و نه در هارد کامپیوتر اینطوری که نمیشه دیتابیس رو خوند.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
ّله درسته
همین دیتابیس با Sqlite maneger درست کنم درسته؟
اما پسوند .db نیست
.sqlite درست میکنه
و نمیدونم این دیتابیس چطور درست کنم؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من الان این بالا تمام مراحل رو توضیح دادم دیگه، چرا اینقدر خودتون رو می پیچونید !!! :لبخند:
پسوند توی فایل های دیتابیس SQLite مهم نیست، شما اون رو تغییر بدید به .db
اگر به هر دلیلی نشد طبق روشی که میگم عمل کنید، من با نرم افزار SQLite Database Browser کار کردم فقط، خیلی هم راحته و کم حجم
تو این نرم افزار دیتابیس رو بسازید و ذخیره کنید با پسوند .db ( پسوند رو خودتون باید اضافه کنید )
بعدش فایل دیتابیس رو زیپ میکنید و طبق آموزش کار با دیتابیس آماده پیش میرید
( من تنها میتونم توی زمینه ای که تجربه دارم راهنمایی کنم، برای همین نرم افزارهای دیگه و پسوندهایی که میدن رو توصیه نمیکنم )
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
میشه لینک دانلود
SQLite Database Browser
بگذارید؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
ممنون
درست کردم و زمانی که فایل zip میکردم خطا میداد
بعد با حالت معمولی گذاشتم درست شد
اما حالا بعد ریختن اطلاعات از طریق برنامه میخوام با sqlitebrowser محتویات ببینم
الان که محتویاتش نگاه میکنم میبینم اطلاعاتی درونش درج نشده
باید چیکار کنم؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
بعد از اینکه دیتابیس رو ساختید حتما باید ذخیره کنید تا اطلاعات داخلش ثبت بشه
دیتابیس رو که ذخیره کردید، اگر بعدا خواستید اطلاعات رو ببینید یا تغییر بدید open database میزنید و فایل دیتابیس رو انتخاب میکنید تا دیتابیس باز بشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من دیتابیس با این برنامه ساختم
بعد در پوشه و مسیرهایی که شما گفتین کپی کردم
و از طریق برنامه اندروید داخلش اطلاعات ذخیره کردم
حالا میخوام همون اطلاعات از طریقsqlitebrowser ببینم
الان کلاسی که گفتین گذاشتم این کدها قرار دادم
SQLiteDatabase mydb; MyDataBase = new MyDatabase(this);
mydb = MyDataBase.getWritableDatabase();
mydb.execSQL("insert into ramz (name,pass) values ('3','3' ) ");
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
آها شما میخواین بعد از انجام تغییرات توی برنامه دیتابیس رو ببینید
برای این کار باید برید به همون DDMS و پوشه دیتا و باز دیتا و بعد پوشه برنامه تون
توی اون تاپیک دیگه گفتید که اونجا نتونستید پیدا کنید، در حالت عادی باید همین جا باشه، مگر اینکه جا به جا کرده باشید ( جای دیگه اش رو اطلاع ندارم الان )
بالاخره فایل دیتابیس برنامه رو باید از طریق همون DDMS بگردید و پیدا کنید، بعد از اینکه پیدا کردید فایل رو انتخاب میکنید، یک آیکون اون بالا هست شبیه save که با اون فایل دیتابیس رو توی کامپیوتر ذخیره میکنید و با نرم افزار بازش میکنید
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام استاد.
چطور میتونم اطلاعات رو از دیتابیس با do و while بگیرم؟
میخوام اطلاعات رو بریزیم توی یک arrayAdapter بعد به یک لیست ویو لینکش کنم.
میشه راهنمایی کنید ؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
davoodi
سلام استاد.
چطور میتونم اطلاعات رو از دیتابیس با do و while بگیرم؟
میخوام اطلاعات رو بریزیم توی یک arrayAdapter بعد به یک لیست ویو لینکش کنم.
میشه راهنمایی کنید ؟
سلام
بابا به خدا من دانشجوام :لبخند: انقد نگو استاد
این کاری که شما میخواین انجام بدید آموزشش توی پست اول همین تاپیک وجود داره
همچنین این نمونه برنامه که گذاشتم میتونه کمکتون کنه توی این کار
باز هم من سعی میکنم یک پروژه کامل واسه کار با دیتابیس تا آخر این هفته بذارم
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
poorman جان تو پروژه افزودن به علاقه مندی ها یه اشکال هست که نتونستم برطرف کنم
اگر داده ها زیاد باشه و اولیین ستاره را لمس کنی و روشن بشه مقدار برابر با yes میشه اما اگه یه اسکرول به پایین کنی و دوباره بالا بیای ستاره خود به خود خاموش میشه (اما مقدار هنوز yes هست)
اگر از او اکتیویتی بیرون بیای و دوباره واردش بشی درست میشه و مشکلی نداره
مشکل اینه چطور باید کار کنیم همون موقع داده ها از رو دیتابیس خوانده بشه؟
http://upir.ir/1393.2/listdata.gif
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
همونجا که داده ها رو توی دیتابیس آپدیت میکنیم ، آرایه رو هم تغییر بده
یعنی :
likes[position] = "yes";
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
اون مشکلی که در بالا گفتم خود تو پروژه شما که از arrayadapter اکستندز شده با کدی که در بالا گذاشتید برطرف میشه.
ولی تو کلاسی که از CursorAdapter گرفته شده اینطور نیست .. منم هر کاریش کردم نتونستم اینو درست کنم
کد کلاس را در زیر قرار میدم
فکر کنم باید me را مانند likes[position] مساوی yes یا no قرار بدم که باز هم نمیشه
public class MyAdapter extends CursorAdapter {
Context b;
LayoutInflater inflater;
@SuppressWarnings("deprecation")
public MyAdapter(Context context, Cursor c) {
super(context, c);
inflater = LayoutInflater.from(context);
b= (Context) context;
}
@SuppressWarnings("unused")
@Override
public void bindView(View view, Context context, final Cursor cursor) {
// TODO Auto-generated method stub
TextView tv1 = (TextView)view.findViewById(R.id.txt_name);
TextView tv2 = (TextView)view.findViewById(R.id.txt_numer);
tv1.setText(cursor.getString(2));
tv2.setText(cursor.getString(3));
final int pos = cursor.getPosition();
final Button favorite_check= (Button)view.findViewById(R.id.favorite_check);
final CheckBox repeatChkBx = (CheckBox)view.findViewById(R.id.favorite_check);
String me = cursor.getString(cursor.getColumnIndex("like"));
if (me.equals("yes")) {
repeatChkBx.setChecked(true);
} else {
repeatChkBx.setChecked(false);
}
repeatChkBx.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View view) {
MyDatabase MyDatabase = new MyDatabase(b);
SQLiteDatabase mydb = MyDatabase.getWritableDatabase();
cursor.moveToPosition(pos);
if (repeatChkBx.isChecked()) {
mydb.execSQL("update list set like = 'yes' where id = " + cursor.getString(1));
}else{
mydb.execSQL("update list set like = 'no' where id = " + cursor.getString(1));
}
}
});
}
protected Context getActivity() {
// TODO Auto-generated method stub
return null;
}
@Override
public View newView(Context context, Cursor cursor, ViewGroup parent) {
return inflater.inflate(R.layout.item, parent, false);
}
}
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
حامد جان چیزی که من پیدا کردم اینه که نمیشه اطلاعات cursor رو مستقیما تغییر داد
شما باید بعد از اینکه دیتابیس رو آپدیت کردی cursor رو requery() کنی ( دیگه تاثیرش روی سرعت رو نمیدونم )
ولی حالا چه اصراری که از CursorAdapter استفاده کنی ؟ مگه آرایه چه مشکلی داره ؟ دست آدم بازتره برای کار با لیست ویو
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
آره راست میگی بهتره از آرایه استفاده کرد
من دارم برای آموزش و یادگیری این پروژه ها را انجام میدم
با آرایه که خوب پروژه شما هست
می خواستم بدونم با cursorAdapter چطور میشه انجام داد
بازم دمت گرم که جواب سوال هام را دادی
شاید یه تاپیک زدم ببینم بچه ها چی میگن
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
البته منم قبل اینکه این پروژه رو بهم بدی اصلا نمیدونستم با cursor میشه آداپتر رو ساخت :لبخند:
و به نظرم راه جالبی اومد برای افزایش سرعت
یک راه حل به ذهنم رسید، بیا علاوه بر cursor که میفرستی، آرایه likes رو هم بفرست، اینطوری هم سرعت کم نمیشه هم کار درست میشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
یعنی چطوری این کارو بکنیم؟ :متفکر:
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
کاری نداره که دیگه
توی آداپتر مقادیر ورودی رو علاوه بر cursor یک آرایه هم بگیر ( که همون آرایه لایک هست و قبلا باید پر بشه )
Context b;
String likes[];
LayoutInflater inflater;
@SuppressWarnings("deprecation")
public MyAdapter(Context context, Cursor c, String likes[]) {
super(context, c);
inflater = LayoutInflater.from(context);
b= (Context) context;
this.likes = likes;
}
این قسمت باید اینطوری تغییر کنه
بعدش هم خواستی چک باکس رو مقدار بدی از cursor مقدار نده، از این آرایه مقدار بده
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
الان curser مثل datatable در سی شارپ عمل میکنه؟
چطر میتونیم یک کلاس بنویسیم که اطلاعات در کرسر بریزه و به صورت استاتیک به بقیه صفحات پاس بدیم
یعنی میخوام برای همه پروزه فقط یک کلاس نوشته بشه هر بار همون فراخونی بشه و فقط دستور اسکیول به عنوان ورودی داده بشه و خروجی اون هم بصورت استاتیک به هر فرمی خواستیم داده بشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
من C# کار نکردم ( VB.NET ) کار کردم، اما فک میکنم آره مثل همون دیتا تیبل باشه
اینکه شما یک کلاس برای پاس دادن cursor بنویسید کار خاصی نداره!!! شما وقتی یک متغیر cursor پابلیک داشته باشی، از تمام اکتیویتی ها و کلاس های دیگه میتونی بهش دسترسی داشته باشی
شما بر فرض توی اکتیویتی اول این cursor عمومی رو مقدار بدین، بعد توی اکتیویتی های دیگه اطلاعاتش رو بخونین
ولی در کل به نظر من این کار لازم نیست، مگر اینکه شما فقط یک یا دو کوئری داشته باشید
چون اگر هر بار بخواین اطلاعات دیتابیس رو توی cursor نگه دارید، فضای زیادی مصرف میشه و چون پابلیک هست این فضا آزاد نمیشه
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
بله فضای زیادی اشغال میکنه
اما دستوری نیست که بعد استفاده از کرسر خالیش کنیم تا فضا ازاد بشه؟
چون به نظر من جالب نیست ما در هر فرمی این تابع بنویسیم فراخونی کنیم اگر در یک کلاس باشه و یکبار نوشته بشه خیلی بهتره
نظرتون چیه؟
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
سلام استاد :لبخندساده:.
من باید توی پروژه از join استفاده میکنم.
فارین کی ها رو با sqlitestudio-2.1.5 در دیتابیسم ساختم.
اما به محض اینکه از دستور inner join استفاده میکنم برنامه خطا میده.
این هم کدهام هستن :
Cursor row = mydb.rawQuery("SELECT table2.* FROM table1 "
+ "INNER JOIN table2 ON table1.a = table2.b", null);
ممنونم.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
davoodi
سلام استاد :لبخندساده:.
من باید توی پروژه از join استفاده میکنم.
فارین کی ها رو با sqlitestudio-2.1.5 در دیتابیسم ساختم.
اما به محض اینکه از دستور inner join استفاده میکنم برنامه خطا میده.
این هم کدهام هستن :
Cursor row = mydb.rawQuery("SELECT table2.* FROM table1 "
+ "INNER JOIN table2 ON table1.a = table2.b", null);
ممنونم.
مشکل بخاطر رعایت نکردن فاصله ها در کوئری بود که حل شد.
ممنون.
-
نقل قول: آموزش : کار با دیتابیس SQLite به زبان ساده بدون نیاز به کلاس DataBaseHelper
نقل قول:
نوشته شده توسط
sara_traveler
بله فضای زیادی اشغال میکنه
اما دستوری نیست که بعد استفاده از کرسر خالیش کنیم تا فضا ازاد بشه؟
چون به نظر من جالب نیست ما در هر فرمی این تابع بنویسیم فراخونی کنیم اگر در یک کلاس باشه و یکبار نوشته بشه خیلی بهتره
نظرتون چیه؟
ببینید کار شما دو تا حالت داره، یکی اینکه کلا دو تا کوئری دارید و روند خواندن اطلاعات از cursor توی تمام صفحات یکسان هست
تو این حالت حرف شما عملی میشه، شما یک تابع پابلیک میذارید و بعد از فراخوانی اطلاعات رو برمیگردونید ( دست خودتونه از چه نوع باشه )
حالت دیگه اینه که کوئری های شما شکل یکسان نداره
توی این حالت تنها میشه کوئری فرستاد و cursor رو دریافت کرد، که تاثیری توی خلاصه سازی نداره به نظر من !!!