commit 6c774fdf21fcb6036586fa79055aa5b58036434a
parent 5d05ca2554f88f1154bf98b7fb3fc94b4d722371
Author: dankert <devnull@localhost>
Date: Thu, 22 Sep 2011 22:11:03 +0200
Beim Upgrade die Datenbank kopieren.
Diffstat:
1 file changed, 174 insertions(+), 134 deletions(-)
diff --git a/src/de/jandankert/hansemerkur/db/DataBaseHelper.java b/src/de/jandankert/hansemerkur/db/DataBaseHelper.java
@@ -10,144 +10,184 @@ import android.database.SQLException;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteException;
import android.database.sqlite.SQLiteOpenHelper;
+import android.util.Log;
+
+public class DataBaseHelper extends SQLiteOpenHelper
+{
+
+ private static final int VERSION = 2;
+
+ // The Android's default system path of your application database.
+ private static String DB_PATH = "/data/data/de.jandankert.hansemerkur/databases/";
+
+ private static String DB_NAME = "hm.db";
+
+ private SQLiteDatabase myDataBase;
+
+ private final Context myContext;
+
+ /**
+ * Constructor Takes and keeps a reference of the passed context in order to
+ * access to the application assets and resources.
+ *
+ * @param context
+ */
+ public DataBaseHelper(Context context)
+ {
+
+ super(context, DB_NAME, null, VERSION);
+ this.myContext = context;
+ }
+
+ /**
+ * Creates a empty database on the system and rewrites it with your own
+ * database.
+ * */
+ public void createDataBase() throws IOException
+ {
+
+ boolean dbExist = checkDataBase();
+ // dbExist = false;
+
+ if (dbExist)
+ {
+ // do nothing - database already exist
+ } else
+ {
+
+ // 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");
+
+ }
+ }
+
+ }
+
+ /**
+ * Check if the database already exist to avoid re-copying the file each
+ * time you open the application.
+ *
+ * @return true if it exists, false if it doesn't
+ */
+ private boolean checkDataBase()
+ {
+
+ SQLiteDatabase checkDB = null;
+
+ try
+ {
+ String myPath = DB_PATH + DB_NAME;
+ checkDB = SQLiteDatabase.openDatabase(myPath, null,
+ SQLiteDatabase.OPEN_READONLY
+ | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
+
+ } catch (SQLiteException e)
+ {
+
+ // database does't exist yet.
+
+ }
+
+ if (checkDB != null)
+ {
+
+ checkDB.close();
+
+ }
+
+ return checkDB != null;
+ }
+
+ /**
+ * 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;
+ myDataBase = SQLiteDatabase.openDatabase(myPath, null,
+ SQLiteDatabase.OPEN_READONLY
+ | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
-public class DataBaseHelper extends SQLiteOpenHelper{
-
- //The Android's default system path of your application database.
- private static String DB_PATH = "/data/data/de.jandankert.hansemerkur/databases/";
-
- private static String DB_NAME = "hm.db";
-
- private SQLiteDatabase myDataBase;
-
- private final Context myContext;
-
- /**
- * Constructor
- * Takes and keeps a reference of the passed context in order to access to the application assets and resources.
- * @param context
- */
- public DataBaseHelper(Context context) {
-
- super(context, DB_NAME, null, 1);
- this.myContext = context;
- }
-
- /**
- * Creates a empty database on the system and rewrites it with your own database.
- * */
- public void createDataBase() throws IOException{
-
- boolean dbExist = checkDataBase();
-
- if(dbExist){
- //do nothing - database already exist
- }else{
-
- //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");
-
- }
- }
-
- }
-
- /**
- * Check if the database already exist to avoid re-copying the file each time you open the application.
- * @return true if it exists, false if it doesn't
- */
- private boolean checkDataBase(){
-
- SQLiteDatabase checkDB = null;
-
- try{
- String myPath = DB_PATH + DB_NAME;
- checkDB = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY | SQLiteDatabase.NO_LOCALIZED_COLLATORS);
-
- }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;
- myDataBase = SQLiteDatabase.openDatabase(myPath, null, SQLiteDatabase.OPEN_READONLY|SQLiteDatabase.NO_LOCALIZED_COLLATORS);
-
- }
-
- @Override
- public synchronized void close() {
-
- if(myDataBase != null)
- myDataBase.close();
-
- super.close();
-
}
-
+
@Override
- public void onCreate(SQLiteDatabase db) {
-
+ public synchronized void close()
+ {
+
+ if (myDataBase != null)
+ myDataBase.close();
+
+ super.close();
+
}
-
+
@Override
- public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {
-
+ public void onCreate(SQLiteDatabase db)
+ {
+
+ }
+
+ @Override
+ public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)
+ {
+
+// try
+// {
+// this.copyDataBase();
+// } catch (IOException e)
+// {
+// Log.w("DB",e);
+// }
}
-
- // Add your public helper methods to access and get content from the database.
- // You could return cursors by doing "return myDataBase.query(....)" so it'd be easy
- // to you to create adapters for your views.
-
+
+ // Add your public helper methods to access and get content from the
+ // database.
+ // You could return cursors by doing "return myDataBase.query(....)" so it'd
+ // be easy
+ // to you to create adapters for your views.
+
}
\ No newline at end of file