Search code examples
javaandroiddatabasesavesd-card

Is it possible to save database file to SD card?


Possible Duplicate:
Is it possible to copy database file to SD card?

I have a database on my Android phone, and I need to get the information onto an SD card.

Is it possible to save the database file onto the SD card in a readable state? I haven't been able to find any information on how to do this. I know the name of the database, and fields etc...

I've found some examples that show how to save to SD cards, but not exactly what I need.

Some source code that copies the database file to an SD card would be perfect.

Hopefully this question is clear enough.


Solution

  • Yes. Here is the function that i use:

    public void copyDBToSDCard() {
        try {
            InputStream myInput = new FileInputStream("/data/data/com.myproject/databases/"+DATABASE_NAME);
    
            File file = new File(Environment.getExternalStorageDirectory().getPath()+"/"+DATABASE_NAME);
            if (!file.exists()){
                try {
                    file.createNewFile();
                } catch (IOException e) {
                    Log.i("FO","File creation failed for " + file);
                }
            }
    
            OutputStream myOutput = new FileOutputStream(Environment.getExternalStorageDirectory().getPath()+"/"+DATABASE_NAME);
    
            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();
            Log.i("FO","copied");
    
        } catch (Exception e) {
            Log.i("FO","exception="+e);
        }
    
    
    }
    

    For a project that I worked on, I put a menu option in the home screen that I could call this function from at any time. Then, I'd move the database to my desktop and open it up with the SQLite Manager plugin for FireFox.