رفتن به مطلب
انجمن اندروید ایران | آموزش برنامه نویسی اندروید و موبایل
  • android.png.1fab383bc8500cd93127cebc65b1dcab.png

پست های پیشنهاد شده

سلام مهندسا

یه اپ نوشتم داره با دیتابیس کار میکنه...وقتی دیتابیسش اپدیت میکنم ( یه سری رکورد جدید بصورت دستی وارد میکنم یا اینکه جدول ها رو تغییر میدم) و دوباره میزارمش تو پوشه asset و برنامه رو روی امولاتور یا حتی گوشی اجرا میشه همون دیتابیس قبلی میاد...حتما باید برنامه رو unstall کنم و بعد دوباره اجرا کنم تا دیتابیس جدید رو بشناسه...

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

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

برای رفع این مشکل باید هر بار 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 را هر بار که تغییراتی در دیتابیس اعمال کنید یک واحد افزایش دهید تا  مشکل برطرف گردد

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

مشکل ورژن برطرف شد .یه مشکل دیگه وجود داره اینکه با اینکار ورژن قبلی پاک میشه و ورژن جدید جایگزین میشه.من میخوام ورژن جدید به ورژن قبلی اضافه بشه راهنمایی بفرمایید.  اینم کد:

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);
}  







}

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

به گفتگو بپیوندید

هم اکنون می توانید مطلب خود را ارسال نمایید و بعداً ثبت نام کنید. اگر حساب کاربری دارید، برای ارسال با حساب کاربری خود اکنون وارد شوید .

مهمان
ارسال پاسخ به این موضوع...

×   شما در حال چسباندن محتوایی با قالب بندی هستید.   حذف قالب بندی

  تنها استفاده از 75 اموجی مجاز می باشد.

×   لینک شما به صورت اتوماتیک جای گذاری شد.   نمایش به صورت لینک

×   محتوای قبلی شما بازگردانی شد.   پاک کردن محتوای ویرایشگر

×   شما مستقیما نمی توانید تصویر خود را قرار دهید. یا آن را اینجا بارگذاری کنید یا از یک URL قرار دهید.

×
×
  • اضافه کردن...