رفتن به مطلب
  • 0

مشکل در اپدیت دیتابیس


mr.ehsan8001

سوال

سلام دوستان من موقعی که در دیتابیس تغییرات ایجاد میکنم و میخوام اپدیت بدم ورژن دیتابیسو بالا میبرم ولی برنامه فورس استاپ میشه. مشکل تو اپدیت دیتابیسه

ارور لاگ کت:

com.readystatesoftware.sqliteasset.SQLiteAssetHelper$SQLiteAssetException: no upgrade script path from 1 to 3

لینک ارسال
به اشتراک گذاری در سایت های دیگر

10 پاسخ به این سوال تاکنون داده شده است

ارسال‌های توصیه شده

در در 1395/10/30, 11:37:45، نیما قبادی گفته است :

سلام

دوست عزیز شما بین دیتابیس داخلی و خارجی الان اینجوری که من میبینم گم شدی.

آموزشی @امین شاهدی گفتن از طریق دیتابیس خارجی هستش 

و آموزش که @amir mahdizadeh برای دیتابیس داخلی هست و خود شما هم همین کد داخلی رو دادین

به نظرم اون آموزش @امین شاهدی رو ببین و برید دنبالش آسون تره تا بخوای به صورت دستی کار کنی (یعنی دیتابیس داخلی باشه). 

 

موفق باشید

سلام اقای قبادی 

نه این طور نیست ما هممون موضوعمون دیتابیس خارجی هست اما استفاده از کتابخونه واسه اپدیت باید مراحل بالا رو انجام داد

یعنی برای اپدیت کردن دیتابیس خارجی دیگه نمیشه دیتابیس رو پاک کرد و فایل جدید به جاش قرار داد( البته این نکته مهم رو بگم که این در شرایطی هست که نخوایم کاربر واسه اپدیت کردن برنامه رو پاک کنه )

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام

دوست عزیز شما بین دیتابیس داخلی و خارجی الان اینجوری که من میبینم گم شدی.

آموزشی @امین شاهدی گفتن از طریق دیتابیس خارجی هستش 

و آموزش که @amir mahdizadeh برای دیتابیس داخلی هست و خود شما هم همین کد داخلی رو دادین

به نظرم اون آموزش @امین شاهدی رو ببین و برید دنبالش آسون تره تا بخوای به صورت دستی کار کنی (یعنی دیتابیس داخلی باشه). 

 

موفق باشید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در در 1395/10/25, 21:58:33، amir mahdizadeh گفته است :

سلام دوست عزیز مشکلتون حل شد یا نه؟؟

من دقیقا به  همین مشکل شما برخورد کردم و متاسفانه اقای شاهدی هم در این مورد کوتاهی کردن و اموزش رو ناقص گفتن

برای اپدیت دادن فقط بالا بردن ورژن کافی نیست بلکه باید یه فایل با پسوند sql درست کنید و اسمش رو اینجوری بذارین 

databasename.db_upgrade-thisversion-newversion

بعدش این فایل رو کنار دیتابیس قبلی بذارین و توی این فایل کد های sql  مربوط به اپدیت شدن دیتابیستون رو بنویسید

کلا یکم کار پیچیده ای البته نه خیلی

نه حل نشد

ینی به جای عدد اپدیت اسم اون دیتابیس اپدیت رو قرار بدم؟

منظور از کد های اپدیت شدن چیه؟

این رو پیدا کردم

@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String sql = "ALTER TABLE " + TABLE_SECRET + " ADD COLUMN " +
     "name_of_column_to_be_added" + " INTEGER";
    db.execSQL(sql);        
}  

 

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 18 ساعت قبل، mr.ehsan8001 گفته است :

نه حل نشد

ینی به جای عدد اپدیت اسم اون دیتابیس اپدیت رو قرار بدم؟

منظور از کد های اپدیت شدن چیه؟

این رو پیدا کردم


@Override
    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
    String sql = "ALTER TABLE " + TABLE_SECRET + " ADD COLUMN " +
     "name_of_column_to_be_added" + " INTEGER";
    db.execSQL(sql);        
}  

 

کد بالا رو نمیدونمچطورب باید باهاش کرد کرد که نوشتید

اما شما توی سیستمون یه فایل تکست بسازید بعدش پسوندش رو بذارین sql و اسمش رو هم اینطوری بنویسید

databasename.db_upgrade_1-2.sql

بعدش این فایل رو توی برنامه توی فولدر اسست کنار فایل دیتابیس خودتون قرار بدید و توی اون فایل دستورات اپدیت شدن دیتابیس رو بنویسید

من در همین حد متوجه شدم میتونید اسم کتابخونه رو توی گوگل سرچ کنید و براتون کتابخونه و نحوه استفادشو توی سایت گیت هاب میاره  

بخونید و اگه متوجه شدید حتمت من رو در جریان قرار بدید چون دقیقا من هم مشکل شما رو دارم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام دوست عزیز 

توی این سایت که براتون گذاشتم قشنگ توضیح داده 

بنده وقت نمیکنم براتون نمونه بسازم. ولی طبق گفته های خودش برید جلو راحته.

How To Android SQLite onUpgrade() | BHW Blog

 

موفق باشید

لینک ارسال
به اشتراک گذاری در سایت های دیگر

این کد هایی که دوستان گفتن ربطی به کتابخونه نداره ،

همونطور که @amir mahdizadeh عزیز گفتن باید ورژن جدید رو با اسم جدید توی assets قرار بدین ، روند کار رو توی گیت هاب توضیح داده شده  : 

 

لینک : GitHub - jgilfelt/android-sqlite-asset-helper: An Android helper class to manage database creation and version management using an application's raw asset files

Database Upgrades

At a certain point in your application's lifecycle you will need to alter it's database structure to support additional features. You must ensure users who have installed your app prior to this can safely upgrade their local databases without the loss of any locally held data.

To facilitate a database upgrade, increment the version number that you pass to your SQLiteAssetHelper constructor:

private static final int DATABASE_VERSION = 2;

Update the initial SQLite database in the project's assets/databases directory with the changes and create a text file containing all required SQL commands to upgrade the database from its previous version to it's current version and place it in the same folder. The required naming convention for this upgrade file is as follows:

assets/databases/<database_name>_upgrade_<from_version>-<to_version>.sql

For example, northwind.db_upgrade_1-2.sql upgrades the database named "northwind.db" from version 1 to 2. You can include multiple upgrade files to upgrade between any two given versions.

If there are no files to form an upgrade path from a previously installed version to the current one, the class will throw a SQLiteAssetHelperException.

The samples:database-v2-upgrade project demonstrates a simple upgrade to the Northwind database which adds a FullName column to the Employee table.

لینک ارسال
به اشتراک گذاری در سایت های دیگر

من یچیز رو درست متوجه نشدم، ینی داخل اون فایل اپدیت ستون و تیبل های جدید رو قرار بدم؟ هیچ اکتیویتی ای هم لازم نداره؟

لینک ارسال
به اشتراک گذاری در سایت های دیگر

اسم فایل مهمه ، شما ورژن که 2 قرار دادین دیتابیس جدید رو به assets اضافه کنید ، فرض کنید دیتابیس اصلی به این اسمه dictionary.db 

حالا دیتابیس جدید رو کنار همین فایل به این اسم بزارین : dictionary.db_upgrade_1-2.sql

لینک ارسال
به اشتراک گذاری در سایت های دیگر

در 51 دقیقه قبل، امین شاهدی گفته است :

اسم فایل مهمه ، شما ورژن که 2 قرار دادین دیتابیس جدید رو به assets اضافه کنید ، فرض کنید دیتابیس اصلی به این اسمه dictionary.db 

حالا دیتابیس جدید رو کنار همین فایل به این اسم بزارین : dictionary.db_upgrade_1-2.sql

 

در 2 ساعت قبل، mr.ehsan8001 گفته است :

من یچیز رو درست متوجه نشدم، ینی داخل اون فایل اپدیت ستون و تیبل های جدید رو قرار بدم؟ هیچ اکتیویتی ای هم لازم نداره؟

ببینید مثلا ما یه توی دیتابیس یه جدول داریم به اسم user که سه تا ستون داره( ایدی و یوزرنیم و فرست) حالا میخوایم برنامه رو اپدیت کنیم و به این جدول یوزر یه ستون جدید با اسم identity اضافه کنیم باید توی اون فایل که با پسوند اس کیو ال ساختیم  کد های زیر رو بنویسیم

 

ALTER TABLE "user" RENAME TO "user_temp";

CREATE TABLE "user" (
"id" int ,
"username" text,
"first" text,
"identity" text

);
INSERT INTO "user"  ("id","username","first") SELECT "id","username","first"  FROM "user_temp";
DROP TABLE "user_temp";

اولش میایم و اسم اون جدول رو عوض میکنیم بعدش یه جدول می سازیم و همه ستون های قبلی و جدیدی رو که می خوایم بهش اضافه کنیم رو وارد می کنیم و در نهایت مقدارهای قبلی رو که توی فیلد های جدول بود میریزیم توی این جدول جدیده و اون جدول کمکی که اول کار اسمش رو عوض کردیم رو پاک می کنیم

لینک ارسال
به اشتراک گذاری در سایت های دیگر

سلام دوست عزیز مشکلتون حل شد یا نه؟؟

من دقیقا به  همین مشکل شما برخورد کردم و متاسفانه اقای شاهدی هم در این مورد کوتاهی کردن و اموزش رو ناقص گفتن

برای اپدیت دادن فقط بالا بردن ورژن کافی نیست بلکه باید یه فایل با پسوند sql درست کنید و اسمش رو اینجوری بذارین 

databasename.db_upgrade-thisversion-newversion

بعدش این فایل رو کنار دیتابیس قبلی بذارین و توی این فایل کد های sql  مربوط به اپدیت شدن دیتابیستون رو بنویسید

کلا یکم کار پیچیده ای البته نه خیلی

لینک ارسال
به اشتراک گذاری در سایت های دیگر

بایگانی شده

این موضوع بایگانی و قفل شده و دیگر امکان ارسال پاسخ نیست.

  • کاربران آنلاین در این صفحه   0 کاربر

    • هیچ کاربر عضوی،در حال مشاهده این صفحه نیست.
×
×
  • اضافه کردن...