Question

Well, I am totally new to android and with my efforts I have created an app that will be storing all passwords related to your day to day life in a database. So that when you need or get confused you can access through this app.

Well one of my friend told an option of making a backup of whatever is stored for good practice and to avoid loss of any crucial data in future.

So, I was thinking to implement a button in my app, which when clicked by user must backup all the information stored in the database to SDCard with an extension of .txt (Why .txt because, it will be easy to import even to systems for easy reference).

Details of my database : It contains five fields.

_id(varchar), profile(varchar), username(varchar), description(varchar), password(varchar)


public class DatabaseHandler {

public static final String KEY_ROWID = "_id";
public static final String KEY_PROFILE = "profile";
public static final String KEY_UNAME = "uname";
public static final String KEY_DESC = "desc";
public static final String KEY_PASSWORD = "password";
private static final String TAG = "DBAdapter";
//private static final String TAG = DBAdapter.class.getSimpleName();

private static final String DATABASE_NAME = "mypass";
private static final String DATABASE_TABLE = "mypasswords";
private static final int DATABASE_VERSION = 1;

private static final String DATABASE_CREATE =
    "create table mypass (_id integer primary key autoincrement, "+ "profile varchar ,"+ "uname varchar  ,"+ "desc varchar  ,"+ "pass varchar");";

  private final Context context; 

   private DatabaseHelper DBHelper;
   private SQLiteDatabase db;

   public DatabaseHandler(Context ctx) 
   {
    this.context = ctx;
    DBHelper = new DatabaseHelper(context);
   }

 private static class DatabaseHelper extends SQLiteOpenHelper 
 {
   DatabaseHelper(Context context) 
   {
        super(context, DATABASE_NAME, null, DATABASE_VERSION);
   }

   @Override
   public void onCreate(SQLiteDatabase db) 
   {
       db.execSQL(DATABASE_CREATE);
   }

   @Override
   public void onUpgrade(SQLiteDatabase db, int oldVersion, 
   int newVersion) 
   {
        Log.w(TAG, "Upgrading database from version " + oldVersion 
               + " to "
               + newVersion + ", which will destroy all old data");
        db.execSQL("DROP TABLE IF EXISTS productdet");
       onCreate(db);
    }
}    

//---opens the database---
 public DatabaseHandler open() throws SQLException 
{
     db = DBHelper.getWritableDatabase();
     return this;
}

//---closes the database---    
public void close() 
{
    DBHelper.close();
}

 //---insert a title into the database---
public long insertTitle(String proname, String procost) 
{
     ContentValues initialValues = new ContentValues();
     initialValues.put(KEY_PRONAME, proname);
     initialValues.put(KEY_PROCOST, procost);
     return db.insert(DATABASE_TABLE, null, initialValues);
}

//---deletes a particular title---
public boolean deleteTitle(long rowId) 
{
     return db.delete(DATABASE_TABLE, KEY_ROWID + 
        "=" + rowId, null) > 0;
}

//---retrieves all the titles---
public Cursor getAllTitles() 
{
     return db.query( DATABASE_TABLE, new String[] {
           KEY_ROWID, 
           KEY_PRONAME,
           KEY_PROCOST,
            }, 
            null, 
            null, 
            null, null, null);
}


//---retrieves a particular title---
public Cursor getTitle(long rowId) throws SQLException 
{
    Cursor mCursor =
        db.query(true, DATABASE_TABLE, new String[] {
                KEY_ROWID,
                KEY_PRONAME, 
                KEY_PROCOST,

                }, 
                KEY_ROWID + "=" + rowId, 
                null,
                null, 
                null, null, null 
                );
    if (mCursor != null) {
         mCursor.moveToFirst();
    }
    return mCursor;
}

//---updates a title---
public boolean updateTitle(long rowId, String proname, 
String procost) 
{
    ContentValues args = new ContentValues();
    args.put(KEY_PRONAME, proname);
    args.put(KEY_PROCOST, procost);
    return db.update(DATABASE_TABLE, args, 
                 KEY_ROWID + "=" + rowId, null) > 0;
}

}

So the backup for each row must be one below the other.

Example:

1 ATM sg sbi 1234

2 BANK xxx ICICI @1234xxx

3 yyy ggfb hgfds 734687

Some sort of coding and example references will be good for me . When I googled I didnt find any sort of backup to .txt format.

Hope I find a good reply instead to complete the backup project.

Help will be surely appreciated. Thanks in advance.

Was it helpful?

Solution

I agree with andDev about the security issues of storing critical password in unencrypted txt files. Assuming you want to backup to the SDCard you should do something similar to the following lines:

File sdCard = Environment.getExternalStorageDirectory();
File dir = new File (sdCard.getAbsolutePath() + "/mybackupfolder/");
dir.mkdirs();
File file = new File(dir, "mybackup.txt");

String content = //  figure out how to read your DB and create a string in the format you want

setContents(file,content);

where the setContents() method is the one below.

private void setContents(File aFile, String aContents)
            throws FileNotFoundException, IOException {
        if (aFile == null) {
            throw new IllegalArgumentException("File should not be null.");
        }
        if (!aFile.exists()) {
            throw new FileNotFoundException("File does not exist: " + aFile);
        }
        if (!aFile.isFile()) {
            throw new IllegalArgumentException("Should not be a directory: " + aFile);
        }
        if (!aFile.canWrite()) {
            throw new IllegalArgumentException("File cannot be written: " + aFile);
        }

        //declared here only to make visible to finally clause; generic reference
        Writer output = null;
        try {
            //use buffering
            //FileWriter always assumes default encoding is OK!
            output = new BufferedWriter(new FileWriter(aFile));
            output.write(aContents);
        } finally {
            //flush and close both "output" and its underlying FileWriter
            if (output != null) {
                output.close();
            }
        }
    }

OTHER TIPS

Please write a little more about what are you trying to achieve. But storing passwords into .txt file does not seem secure for me.

Read this blog post for more info: http://android-developers.blogspot.com/2013/02/using-cryptography-to-store-credentials.html

Well that is not too safe but you can store datebase in sdcard

1) save .sqlite file in SDcard.

2) convert database in CSV file and then save it in SDcard.

3) you can save on server if application access internet.

you can see information regarding csv

export sqlite into csv

Import .csv file to Sqlite in Android

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top