数据库处理程序SQLlite版本问题

时间:2016-02-07 04:20:30

标签: android database sqlite

我有一个具有sqllite数据库的报价应用程序。我已经发布了第一个版本的应用程序,它没有任何数据库版本字段。现在我需要重新发布数据库版本= 1的应用程序。我正在尝试自己使用此代码但获得复制数据的问题。如果我想要有数据库版本1的更新应用程序,我应该应用哪个条件,那么安装了没有数据库版本字段的应用程序的新用户和新用户也没有遇到任何问题? 我的数据库处理程序类如下所示。 感谢



   public class DataBaseHandler extends SQLiteOpenHelper {

private static String DB_PATH;
private static String DB_NAME = "SuccessQuotes";
private SQLiteDatabase myDataBase;
private final Context myContext;
private static final int DATABASE_VERSION = 1;

		
		public DataBaseHandler(Context context) {

	super(context, DB_NAME, null, DATABASE_VERSION);
	this.myContext = context;
	DB_PATH = context.getDatabasePath(DB_NAME).toString();
	Log.e("path", DB_PATH);
}

public void createDataBase() throws IOException {

	boolean dbExist = checkDataBase();

	if (dbExist) {

	} else {

		this.getReadableDatabase();

		try {

			copyDataBase();

		} catch (IOException e) {

			throw new Error("Error copying database");

		}
	}

}

// ==============================================================================

private boolean checkDataBase() {

	SQLiteDatabase checkDB = null;

	try {
		String myPath = DB_PATH;
		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;
}

// ==============================================================================

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;

	// 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;
	myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY);

}

// ==============================================================================

@Override
public synchronized void close() {

	if (myDataBase != null)
		myDataBase.close();

	super.close();

}

// ==============================================================================

@Override
public void onCreate(SQLiteDatabase db) {

}

// ==============================================================================

@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {

}
}




1 个答案:

答案 0 :(得分:0)

数据库版本由SQLiteOpenHelper类自动存储。

当您的DATABASE_VERSION值大于当前存储在数据库中的版本时,onUpgrade会在第一次打开尝试时自动调用getWritableDatabase()