好吧,我对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 BANK xxx ICICI @ 1234xxx
3 yyy ggfb hgfds 734687
某种编码和示例参考对我有好处。当我用Google搜索时,我没有找到.txt格式的任何备份。
希望我找到一个好的回复,而不是完成备份项目。
帮助肯定会受到赞赏。提前谢谢。
答案 0 :(得分: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();
}
}
}
答案 1 :(得分:0)
请写一点关于你想要实现的目标。但是将密码存储到.txt文件对我来说似乎并不安全。
阅读此博客文章了解更多信息:http://android-developers.blogspot.com/2013/02/using-cryptography-to-store-credentials.html
答案 2 :(得分:0)
那不太安全但你可以在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的信息