View Full Version : Replace Database
mehdidanesh
یک شنبه 17 آبان 1394, 22:16 عصر
با سلام
می خوام بعد از اینکه اپم رو انتشار دادم بانک اطلاعات اون را چند وقت یکی آپدیت کنم یا به عبارتی کلا دیتابیس جدید با قبلیه جایگزین بشه
روشی برای اینکار می خوام کسی میدونه؟
با تشکر
mehdidanesh
سه شنبه 19 آبان 1394, 06:46 صبح
تاپیک این همه بازدید داشته یعنی کسی نیست جواب بده!!!!؟؟:متعجب:
aliireza
سه شنبه 19 آبان 1394, 09:55 صبح
اگر شما تو اپ از طریق SQLiteOpenHelper با بانک اطلاعاتی ارتباط برقرار کردید یک مقدار داریم به نام DATABASE_VERSION که نسخه دیتابیس رو مشخص میکنه.
وقتی که در دیتابیس تیبلی اضافه یا کم یا تغییرات در دیتابیس ایجاد میکنید، شما میتونید مقدار DATABASE_VERSION رو اضافه کنید (مثلا از نسخه ۱ به نسخه ۲ تغییر بدید)
هروقت این مقدار تغییر کنه (تغییرش فقط میتونه اضافه کردن نسخه باشه) به صوورت اتوماتیک متد onUpgrade اجرا میشه.
وظیفه onUpgrade هم اینه که دیتابیس فعلی رو از بین ببره، و دیتابیس با مشخصات جدید رو جایگزین کنه.
حتما این نکته پیش میاد که پس دیتاهای کاربر چی میشه؟ که نکته سخت ماجرا همینجاست. شما باید این دیتاهارو موقع اجرای onUpgrade بخونید و در جدول جدید کپی کنید!
همین :)
mehdidanesh
سه شنبه 19 آبان 1394, 10:58 صبح
یعنی ما در apk می تونیم دسترسی به asset داشته باشیم؟!
توجه داشته باشید که من می خواهم کلا دیتابیس رو بردارم و یک دیتابیس دیگر بذارم!
اگه کد مربوطشم دارید بذارید.
ممنون از لطفتون
aliireza
سه شنبه 19 آبان 1394, 20:19 عصر
یعنی ما در apk می تونیم دسترسی به asset داشته باشیم؟!
توجه داشته باشید که من می خواهم کلا دیتابیس رو بردارم و یک دیتابیس دیگر بذارم!
اگه کد مربوطشم دارید بذارید.
ممنون از لطفتون
آره دیگه دسترسی داریم. assets تو خود پکیج برنامهست. وقتی نسخه دیتابیس رو اضافه میکنید خودش خودکار تشخیص میده و نسخه جدید رو از assets میگیره و جایگزین دیتابیس تو گوشی کاربر میکنه.
اگر شما نگرانی بابت دیتای کاربر ندارید که مشکلی نیست. DATABASE_VERSION رو یه شماره اضافه کن و فایل دیتابیس رو جایگزین قبلی کن.
البته اینم بگم این یه تیکه کد به تنهایی فایده نداره شما باید کار با SQLiteOpenHelper رو بلد باشی. اینم کد:
public class NoteDbOpenHelper extends SQLiteOpenHelper {
public static final String DATABASE_NAME = "database.db";
private static final int DATABASE_VERSION = 1;
public static final String TABLE_NOTE = "note";
public static final String NOTE_ID = "id";
public static final String NOTE_TITLE = "title";
public static final String NOTE_TEXT = "text";
public static final String NOTE_DATE = "date";
private static final String TABLE_CREATE =
"CREATE TABLE " + TABLE_NOTE + " (" +
NOTE_ID + " INTEGER PRIMARY KEY AUTOINCREMENT, " +
NOTE_TITLE + " VARCHAR, " +
NOTE_TEXT + " TEXT, " +
NOTE_DATE + " TEXT " +
")";
public NoteDbOpenHelper(Context context) {
super(context, DATABASE_NAME, null, DATABASE_VERSION);
}
@Override
public void onCreate(SQLiteDatabase db) {
db.execSQL(TABLE_CREATE);
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
db.execSQL("DROP TABLE IF EXISTS" + TABLE_NOTE);
onCreate(db);
}
}
saeedsfm
سه شنبه 19 آبان 1394, 20:25 عصر
سلام دوستان منم همین مشکل رو دارم دقیقا میخوام دیتابیس جدیدم از طرق سرور جایگزین دیتابیس قبلی بشه دیتابیس منم تو پوشه asset هست چطوری باید اینکار رو انجام بدم. مثلا یه دکمه هم قرار بدم و بعد از فشردن رو این دکمه آپدیت انجام بشه
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.