Hi Guys,

I ship a pre-created database as a raw resource and copy it into my
app's
database folder at startup. When I ship updates I overwrite the old db
with
my new db, which sometimes includes new stuff.

I can't reproduce this with any of my devices, but some of my app's
users
get a crash when my app calls this.getReadableDatabase() in my
override for
createDataBase:

android.database.sqlite.SQLiteException:
Can't upgrade read-only database from version 62 to 1: /data/data/
com.myapp.myapp/databases/ls.db
at
android.database.sqlite.SQLiteOpenHelper.getReadableDatabase(SQLiteOpenHelper.java:
236)
at com.myapp.myapp.DataBaseHelper.createDataBase(DataBaseHelper.java:
75)
at com.myapp.myapp.myapp.MyApp$11.run(MyApp.java:675)
at java.lang.Thread.run(Thread.java:1020)

    public void createDataBase() throws IOException{
        boolean dbExist = checkDataBase();
        if(dbExist){
                //do nothing - database already exists
        }else{

                // delete the old database
                this.getReadableDatabase();   <<<---- Exception is thrown HERE

                try {
          copyDataBase();

                } catch (IOException e) {
                        throw new Error("Error copying database");
                }
        }

    }

I copy the database as follows:

    private void copyDataBase() throws IOException{

        //Open your local db as the input stream
        InputStream myInput = null;

        // 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);


        myInput = myContext.getResources().openRawResource(R.raw.ls_db);
        //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);
        }
        myInput.close();



        //Close the streams
        myOutput.flush();
        myOutput.close();
        myInput.close();

        openDataBase();
        myDataBase.setVersion(packageVers);

        // Copy stored data to new database
        ...

        close();
    }

////////////////////////

Is the call to:

// delete the old database
                this.getReadableDatabase();

problematic? What I really want to do is

chmod 777 myolddb
rm -f myolddb

if this were plain old Unix. What situations can lead to Android
treating this
as a read-only entity that can't be overwritten? This database is
originally created
by my app, and I only overwrite it on app updates.

Thanks!!

pawpaw17

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to android-developers@googlegroups.com
To unsubscribe from this group, send email to
android-developers+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to