2013-10-02 2 views
0

Ну, я совершенно не знаком с Android и с моими усилиями создал приложение, которое будет хранить все пароли, связанные с вашей повседневной жизнью в базе данных. Поэтому, когда вам нужно или запутаться, вы можете получить доступ к этому приложению.Как я могу сделать резервную копию моей базы данных Android в текстовом формате

Хорошо, один из моих друзей рассказал о том, как сделать резервную копию того, что хранится для хорошей практики, и во избежание потери каких-либо важных данных в будущем.

Итак, я решил реализовать кнопку в своем приложении, которая при нажатии пользователем должна сделать резервную копию всей информации, хранящейся в базе данных, на SDCard с расширением .txt (почему .txt, потому что это будет легко импортировать даже в системы для простой справки).

Информация о моей базе данных: содержит пять полей.

_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; 
} 

} 

Таким образом, резервная копия для каждой строки должна быть одна под другой.

Пример:

1 ATM SG SBI 1234

2 БАНК ххх АйСиАйСиАи @ 1234xxx

3 его ggfb hgfds 734687

Какого-то ссылка кодирования и примера будет хорошо для меня , Когда я googled, я не нашел никакой резервной копии в формате .txt.

Надеюсь, что я нахожу хороший ответ, чтобы завершить проект резервного копирования.

Помощь будет оценена по достоинству. Заранее спасибо.

ответ

1

Я согласен с andDev о проблемах с безопасностью хранения критического пароля в незашифрованных файлах txt. Предполагая, что вы хотите сделать резервную копию на SDCard вы должны сделать что-то похожее на следующие строки:

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

где вызывается метод setContents() является ниже один.

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(); 
      } 
     } 
    } 
+0

То, что вы дали String Content = //, я этого не понимал. Нужно ли создавать курсор для чтения данных по строкам? –

+0

Да, и вы можете перебирать его и составлять нужную строку, используя метод StringBuilder (append()). – elbuild

+0

ОК. хорошо, я обновил сообщение mu с обработчиком базы данных. вы могли бы предложить некоторый код для содержимого String –

0

Пожалуйста, напишите немного больше о том, чего вы пытаетесь достичь. Но хранение паролей в .txt-файле для меня не кажется безопасным.

Читать этот блог для получения дополнительной информации: http://android-developers.blogspot.com/2013/02/using-cryptography-to-store-credentials.html

+0

Я понимаю, что сохранение его таким образом небезопасно. но мне нужно это в txt. только формат. Потому что в будущем все мои личные приложения будут иметь информацию, которую я хочу отобразить в момент времени моим коллегам. –

0

Хорошо, что это не слишком безопасно, но вы можете хранить datebase в 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. 

вы можете увидеть информацию о формате CSV

export sqlite into csv

Import .csv file to Sqlite in Android

Смежные вопросы