То, что я пытаюсь достичь, это то, что мое приложение будет поставляться с существующей базой данных sqlite, экспортированной с моей веб-панели, с некоторыми записями (новостями, продуктами, категориями и т. Д.) И позже он будет вставлять в него некоторые записи (скажем, он будет вставлять уведомления, которые он получает), и он будет скопирован в папку с базами данных, до этого нет проблем , но моя забота - когда пользователь обновляет их применение через рынок. Я хочу заменить новую базу данных на старую, но сохранить эти записи, созданные приложением, (уведомления, полученные ею), и вставить их в новую. Вот мой код до сих пор: (пожалуйста, повысьте, если необходимо)android onUpgrade перемещение некоторых записей из старого db в новый db
public class Helper_Db extends SQLiteOpenHelper{
public static final String DB_NAME = "Test.sqlite";
public static final int DB_VERSION = 3;
private static String DB_PATH = "";
private SQLiteDatabase _db;
private final Context _ctx;
public Helper_Db(Context context) {
super(context, null, null, 1);
DB_PATH = "/data/data/" + context.getPackageName() + "/databases/";
_ctx = context;
}
@Override
public void onCreate(SQLiteDatabase db) {
try
{
copyDatabase();
Log.e("DATABASE", "Database created");
}
catch(IOException io)
{
Log.e("DATABASE", io.toString());
}
}
@Override
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
//take out the notifications from old db
//insert them into the new db
//delete the old db
//copy the new db
}
private void copyDatabase() throws IOException
{
InputStream input = _ctx.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream output = new FileOutputStream(outFileName);
byte [] buffer = new byte [1024];
int length;
while((length = input.read(buffer)) > 0)
{
output.write(buffer, 0, length);
}
output.flush();
output.close();
input.close();
}
public boolean openDatabase() throws SQLException
{
String path = DB_PATH + DB_NAME;
_db = SQLiteDatabase.openDatabase(path, null,
SQLiteDatabase.CREATE_IF_NECESSARY);
return _db != null;
}
@Override
public void close()
{
if(_db != null)
{
_db.close();
}
super.close();
}
}
Заранее спасибо.