如何将android数据库备份为文本格式

如何将android数据库备份为文本格式,android,backup,notepad,Android,Backup,Notepad,嗯,我对安卓系统完全陌生,通过我的努力,我已经创建了一个应用程序,它将在数据库中存储与您日常生活相关的所有密码。因此,当您需要或感到困惑时,您可以通过此应用程序访问 好吧,我的一个朋友告诉我一个选项,就是对存储的任何东西进行备份,以便进行良好的实践,避免将来丢失任何关键数据 因此,我想在我的应用程序中实现一个按钮,当用户单击该按钮时,必须将数据库中存储的所有信息备份到扩展名为.txt的SDCard(为什么是.txt,因为它甚至可以很容易地导入到系统中以便于参考) 我的数据库的详细信息:它包含五个

嗯,我对安卓系统完全陌生,通过我的努力,我已经创建了一个应用程序,它将在数据库中存储与您日常生活相关的所有密码。因此,当您需要或感到困惑时,您可以通过此应用程序访问

好吧,我的一个朋友告诉我一个选项,就是对存储的任何东西进行备份,以便进行良好的实践,避免将来丢失任何关键数据

因此,我想在我的应用程序中实现一个按钮,当用户单击该按钮时,必须将数据库中存储的所有信息备份到扩展名为.txt的SDCard(为什么是.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银行xxx ICICI@1234xxx

3 yyy ggfb hgfds 734687

一些编码和示例参考对我来说是很好的。当我在谷歌上搜索时,我没有找到任何.txt格式的备份

希望我找到一个好的答复,而不是完成备份项目


我们一定会感激你的帮助。提前谢谢。

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


阅读这篇博文了解更多信息:

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


阅读这篇博文了解更多信息:

这并不太安全,但您可以将数据库存储在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的信息


这不太安全,但您可以将数据库存储在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的信息


关于在未加密的txt文件中存储关键密码的安全问题,我同意andDev的观点。假设要备份到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);
其中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();
            }
        }
    }

关于在未加密的txt文件中存储关键密码的安全问题,我同意andDev的观点。假设要备份到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);
其中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();
            }
        }
    }

你给String Content的东西=//我不明白。我是否需要创建一个光标来逐行读取数据?是的,您可以使用StringBuilder(append()方法)对其进行迭代并合成所需的字符串。确定。我用数据库处理程序更新了mu post。你能为String Content提供一些代码吗?你给String Content的东西=//我不明白。我是否需要创建一个光标来逐行读取数据?是的,您可以使用StringBuilder(append()方法)对其进行迭代并合成所需的字符串。确定。我用数据库处理程序更新了mu post。你能为字符串内容提供一些代码吗?我知道用那种方式保存是不安全的。但我需要txt格式的。仅限格式。因为在将来,我所有的个人应用程序都会有我想在瞬间显示给同事的信息。我知道以这种方式保存信息是不安全的。但我需要txt格式的。仅限格式。因为在将来,我所有的个人应用程序都会有我想在瞬间显示给同事的信息。