ftml 0 ارسال شده در ۲۶ خرداد ۱۳۹۴ گزارش اشتراک گذاری ارسال شده در ۲۶ خرداد ۱۳۹۴ سلام مهندسا یه اپ نوشتم داره با دیتابیس کار میکنه...وقتی دیتابیسش اپدیت میکنم ( یه سری رکورد جدید بصورت دستی وارد میکنم یا اینکه جدول ها رو تغییر میدم) و دوباره میزارمش تو پوشه asset و برنامه رو روی امولاتور یا حتی گوشی اجرا میشه همون دیتابیس قبلی میاد...حتما باید برنامه رو unstall کنم و بعد دوباره اجرا کنم تا دیتابیس جدید رو بشناسه... میخوام یه نمونه بهم معرفی کنید یا راهنمایی کنید که چطوری میشه اپدیت جدید دیتابیس رو نشون داد و ورژن دیتابیس رو بالا برد. نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
Farzad Sarseifi 575 ارسال شده در ۲۷ خرداد ۱۳۹۴ گزارش اشتراک گذاری ارسال شده در ۲۷ خرداد ۱۳۹۴ برای رفع این مشکل باید هر بار version دیتابیس خودتون رو یکی اضافه کنید این کد رو اینطوری بنیوسید [shcode=java] public Database(Context context) { super(context, DB_NAME, null, 1); this.myContext = context; DB_PATH = "/data/data/" + context.getPackageName() + "/" + "databases/"; [/shcode]} عدد 1 را هر بار که تغییراتی در دیتابیس اعمال کنید یک واحد افزایش دهید تا مشکل برطرف گردد نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
ftml 0 ارسال شده در ۳۰ خرداد ۱۳۹۴ مالک گزارش اشتراک گذاری ارسال شده در ۳۰ خرداد ۱۳۹۴ مشکل ورژن برطرف شد .یه مشکل دیگه وجود داره اینکه با اینکار ورژن قبلی پاک میشه و ورژن جدید جایگزین میشه.من میخوام ورژن جدید به ورژن قبلی اضافه بشه راهنمایی بفرمایید. اینم کد: package com.p30droid.externaldatabase; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.util.ArrayList; import java.util.List; import android.content.ContentValues; import android.content.Context; import android.database.Cursor; import android.database.SQLException; import android.database.sqlite.SQLiteDatabase; import android.database.sqlite.SQLiteDatabase.CursorFactory; import android.database.sqlite.SQLiteException; import android.database.sqlite.SQLiteOpenHelper; import android.os.Environment; import android.widget.Toast; public class Database extends SQLiteOpenHelper { String DB_PATH = null; public static String DB_NAME = "ExternalDB"; private SQLiteDatabase myDataBase; private final Context myContext; private static int DATABASE_VERSION = 11; /** * Constructor Takes and keeps a reference of the passed context in order to * access to the application assets and resources. * * @param context */ public Database(Context context) { super(context, DB_NAME, null, DATABASE_VERSION); this.myContext = context; DB_PATH = Environment.getDataDirectory() + "/data/" + context.getPackageName() + "/" + "databases/"; } public void createDataBase() throws IOException { boolean dbExist = checkDataBase(); // By calling this method and empty database will be created into // the default system path // of your application so we are gonna be able to overwrite that // database with our database. this.getReadableDatabase(); try { copyDataBase(); } catch (IOException e) { throw new Error("Error copying database"); } } private boolean checkDataBase() { SQLiteDatabase checkDB = null; try { String myPath = DB_PATH + DB_NAME; checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY); } catch (SQLiteException e) { // database does't exist yet. } if (checkDB != null) { checkDB.close(); } return checkDB != null ? true : false; } /** * Copies your database from your local assets-folder to the just created * empty database in the system folder, from where it can be accessed and * handled. This is done by transfering bytestream. * */ private void copyDataBase() throws IOException { // Open your local db as the input stream InputStream myInput = myContext.getAssets().open(DB_NAME); // Path to the just created empty db String outFileName = DB_PATH + DB_NAME; // Open the empty db as the output stream OutputStream myOutput = new FileOutputStream(outFileName); // transfer bytes from the inputfile to the outputfile byte[] buffer = new byte[1024]; int length; while ((length = myInput.read(buffer)) > 0) { myOutput.write(buffer, 0, length); } // Close the streams myOutput.flush(); myOutput.close(); myInput.close(); } public void openDataBase() throws SQLException { // Open the database String myPath = DB_PATH + DB_NAME; // SQLiteDatabase.NO_LOCALIZED_COLLATORS myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS | SQLiteDatabase.CREATE_IF_NECESSARY); } @Override public synchronized void close() { if (myDataBase != null) myDataBase.close(); super.close(); } // return cursor public Cursor query(String table, String[] columns, String selection, String[] selectionArgs, String groupBy, String having, String orderBy) { return myDataBase.query("pwp_singers", null, null, null, null, null, null); } // public boolean deletedata(char c) // { // return myDataBase.delete("tbl1", "id=" + c, null) > 0; // } @Override public void onCreate(SQLiteDatabase arg0) { // TODO Auto-generated method stub } @Override public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) { //myContext.deleteDatabase(DB_NAME); } } نقل قول لینک ارسال به اشتراک گذاری در سایت های دیگر
پست های پیشنهاد شده
به گفتگو بپیوندید
هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .