如何将我的安卓数据库备份为文本格式



好吧,我是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 自动柜员机 SG SBI 1234

2 银行 xxx ICICI @1234xxx

3 年 GGFB HGFDS 734687

某种编码和示例参考对我有好处.当我用谷歌搜索时,我没有找到任何.txt格式的备份。

希望我能找到一个好的回复来完成备份项目。

帮助将不胜感激。提前谢谢。

我同意 andDev 关于在未加密的 txt 文件中存储关键密码的安全问题。假设您要备份到 SD卡,您应该执行类似于以下行的操作:

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

其中 setContent(( 方法是下面的方法。

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

请多写一点关于你想要实现的目标。但是将密码存储到.txt文件中对我来说似乎并不安全。

阅读此博客文章了解更多信息:http://android-developers.blogspot.com/2013/02/using-cryptography-to-store-credentials.html

好吧,

这不是太安全,但您可以将日期库存储在SD卡中

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 的信息

将SQLite导出为CSV

在安卓中导入.csv文件到Sqlite

最新更新