علاقه مندی در دیتابیس
در انجمن جستجوهایی کردم به نتیجه ی خاصی نرسیدم
علاقه مندی در دیتابیس یعنی یک فیلد بولین بذارم اگر یک باشه یعنی علاقه مندیه و صفر باشه یعنی نیست. این فیلد اگر توی دیتابیس مطالب باشه (گرچه یک جدول جدا براش درست کنم) با آپگرید دیتابیس (و افزودن مطالب به آن) علاقه مندی ها از بین میره (چون با آپگرید دیتابیس پاک میشه دوباره ساخته میشه و ستون علاقه مندی هم برای مطالب قبلی پاک میشه دوباره ساخته میشه) آیا راهی برای اینکه علاقه مندی ها از بین نره هست؟
چندتا راه به ذهنم رسید مثلا 1- باید از پریفرنس استفاده کنم که مشکلات خودش رو داره ( یا باید آیدی مطلب و عدد علاقه مندی رو توش ذخیره کنم که نیاز به هش مپ پریفرنس داره که فکرنکنم همچین چیزی داشته باشیم یا باید همه رو توی یک پریفرنس ذخیره کنم و بعد با split جدا کنم که در صورت زیاد شدن مشکل ایجاد میشه) یا 2- باید کاری کنم آپگرید که میکنه فقط سطرهای جدید اضافه کنه قبلی ها رو پاک نکنه (که سرچ کردم چیزایی گفته بودن ولی به نتیجه خاصی نرسیدم) یا 3- دیتابیس علاقه مندی رو جدا کنم و اون رو آپگرید نکنم (که وقتی جدا باشه باید دوتا دیتابیس رو join کرد که اگر علاقه مندی بود مطالب و تیتر تو یک دیتابیس باشه و همزمان لود بشه که دوتا دیتابیس کاملا جدا که در دو فایل جاوا تعریف شده رو نتوستم join کنم)
خلاصه راهی برای علاقه مندی هست که با آپگرید دیتابیس از بین نره؟
من فعلا تقریبا راه چهارمی رفتم که 4- دوتا دیتابیس درست کردم که فقط یکی رو آپگرید کنم و اون یکی برای بکآپ علاقه مندی باشه که هر وقت دیتابیس مطالب رو آپگرید کردم دیتابیس علاقه مندی ها رو کپی کنم توی دیتابیس مطالب که کپیش یکم به مشکل خورده (باید هر سطر رو آپدیت کنم طبق اون ولی نمیدونم با چه کدی من تو حلقه while انداختم ولی آیدی ها رو نمیدونم چطور در بیارم)
DBItems dbitems = new DBItems(getBaseContext()); DBFav dbfav = new DBFav(getBaseContext()); dbItems.open(); dbfav.open(); List<Items> hkmats = dbitems.getFavItms(); List<Rabie> fav = dbfav.getFavItms(); if (fav.size() > hkmats.size()) { int favsize = fav.size()+1; int hkmatsize = 0; while (favsize > hkmatsize) { dbitems.updateFavItem(fav.get(hkmatsize).getId());
hkmatsize++; } } dbfav.close(); dbitems.close();
کد دیتابیس getFavItems (در آیتمها و فوریت) و کد updateFavItem اینه:
public List<Items> getFavItms() throws SQLException {
Cursor cursor =
db.query(true, DATABASE_Items, Items_Var, KEY_FAV + " == '1' ", null,
null, null, null, null);
List<Items> items = contentsToList(cursor);
return items;
}
public void updateFavItem(int field) throws SQLException {
Cursor cursor = db.rawQuery("UPDATE " + DATABASE_Items + " SET" + KEY_FAV + "== '" + 1 + "' WHERE " + KEY_ID + " == '" + field + "' ",null);
cursor.moveToFirst();
}
//از اینم میشه استفاده کرد برای آپدیت:
/* public boolean updateFavItem(int field) {
ContentValues args = new ContentValues();
args.put(KEY_ID, field.getId());
args.put(KEY_FAV, field.getFav());
args.put(KEY_READ, field.getRead());
return db.update(DATABASE_Items, args, KEY_ID + "=" + field.getId(), null) > 0;
}*/
که عددی که fav.get(hkmatsize).getId() بر میگردونه 0و1و2و... ست نه آیدی مطلب
پاسخگویی و مشاهده پاسخ های این سوال تنها برای اعضای ویژه سایت امکان پذیر است .
چنانچه تمایل دارید به همه بخش ها دسترسی داشته باشید میتوانید از این بخش لایسنس این آموزش را خریداری نمایید .