ftml

sqlite expert اپدیت

3 ارسال در این موضوع قرار دارد

سلام مهندسا

یه اپ نوشتم داره با دیتابیس کار میکنه...وقتی دیتابیسش اپدیت میکنم ( یه سری رکورد جدید بصورت دستی وارد میکنم یا اینکه جدول ها رو تغییر میدم) و دوباره میزارمش تو پوشه 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);
}  







}

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


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

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری