नहीं कहा जाता है, मैं एक एंड्रॉइड एप्लिकेशन पर काम कर रहा हूं जहां मैंने संपत्ति फ़ोल्डर में मौजूदा स्क्लाइट डेटाबेस का उपयोग किया था। तो मैं वास्तव में उस फ़ोल्डर से डेटाबेस की प्रतिलिपि बनाएँ। उपयोगकर्ता अपना डेटा भी सहेज सकता है (किसी भी सामग्री को पसंदीदा के रूप में चिह्नित करें)।स्क्लाइट डेटाबेस ऑनअपग्रेड() को
मैंने बाजार में एक संस्करण अपलोड किया। अब मैं डेटाबेस में कुछ नया डेटा जोड़ना चाहता हूं और एक नया संस्करण अपलोड करना चाहता हूं। यदि उपयोगकर्ता बाजार से ऐप अपडेट करता है तो मैं उपयोगकर्ता डेटा (पिछले संस्करण से) रखना चाहता हूं और नया डेटा भी जोड़ना चाहता हूं। मैंने कुछ Google किया है और पाया है कि अपग्रेड विधि पर चाल चलनी चाहिए। लेकिन मैं कोड से DATABASE_VERSION बदल रहा हूं लेकिन अपग्रेड विधि पर कॉल नहीं मिलता है। मुझे आश्चर्य है कि मैंने कुछ याद किया है।
public class DataBaseHelper extends SQLiteOpenHelper {
private static String DB_PATH = "/data/data/riskycoder.login/databases/";
public static String DB_NAME = "datenbank_EN.sqlite";
private SQLiteDatabase myDataBase;
private final Context myContext;
private static final int DATABASE_VERSION = 1;
public DataBaseHelper(Context context) {
super(context, DB_NAME, null, DATABASE_VERSION);
this.myContext = context;
}
public void createDataBase() throws IOException {
boolean dbExist = checkDataBase();
if (dbExist) {
} else {
this.getWritableDatabase();
try {
this.close();
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_READWRITE);
} catch (SQLiteException e) {
}
if (checkDB != null)
checkDB.close();
return checkDB != null ? true : false;
}
private void copyDataBase() throws IOException {
InputStream myInput = myContext.getAssets().open(DB_NAME);
String outFileName = DB_PATH + DB_NAME;
OutputStream myOutput = new FileOutputStream(outFileName);
byte[] buffer = new byte[2048];
int length;
while ((length = myInput.read(buffer)) > 0) {
myOutput.write(buffer, 0, length);
}
myOutput.flush();
myOutput.close();
myInput.close();
//myDataBase.setVersion(DATABASE_VERSION);
}
public void openDataBase() throws SQLException {
String myPath = DB_PATH + DB_NAME;
myDataBase = SQLiteDatabase.openDatabase(myPath, null,SQLiteDatabase.OPEN_READWRITE);
Log.d("Test", "Database version: " +myDataBase.getVersion());
}
@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) {
Log.d("Test", "in onUpgrade. Old is: " + oldVersion + " New is: " + newVersion);
}
}
* मैं .. * कोड से DATABASE_VERSION बदल रहा हूँ, वास्तव में क्या इसका मतलब यह है है? मैं देखता हूं कि आप 'SQLiteOpenHelper' के निरंतर फ़ील्ड' DATABASE_VERSION' (जो स्पष्ट रूप से बदला नहीं जा सकता) के सुपर कन्स्ट्रक्टर को कॉल करते हैं, तो आप डेटाबेस संस्करण को वास्तव में कैसे बदलते हैं? – Luksprog
एप्लिकेशन के नए संस्करण में मैंने DATABASE_VERSION को 2 में बदल दिया है। इसलिए नए संस्करण को इंस्टॉल करते समय ऑन अपग्रेड विधि को कॉल किया जाना चाहिए। या मुझे कुछ याद आ रहा है? – rawcoder064
सबसे पहले, आपके द्वारा पोस्ट किया गया कोड शोटा DATABASE_VERSION 1 है, इसलिए अपग्रेड पर कॉल नहीं किया जाएगा।दूसरा, भले ही यह 2 था, आपके ऑन अपग्रेड में डेटाबेस अपडेट करने के लिए कोई भी कोड करने के लिए कोई कोड नहीं है। यह स्वचालित रूप से नहीं होता है, आपको इसे करना है। – Barak