備份Sqlite DB到XML文件:
发布时间:2020-12-12 20:06:24 所属栏目:百科 来源:网络整理
导读:转载请注明出处: http://blog.csdn.net/krislight 项目中遇到备份与还原App数据的需求,需要把DB数据备份到一个XML文件中,然后保存到SD卡上,还原的时候直接从XML文件解析数据进行insert DB动作。 现总结下实现方法,定义一个工具类 /** * from sqlite to xml
转载请注明出处:http://blog.csdn.net/krislight 项目中遇到备份与还原App数据的需求,需要把DB数据备份到一个XML文件中,然后保存到SD卡上,还原的时候直接从XML文件解析数据进行insert DB动作。 现总结下实现方法,定义一个工具类
/** * from sqlite to xml * * @author Kris */ public class DatabaseLog { // back up dir private String mDestXmlFileDir = "/psmd/appName/backup/"; private SQLiteDatabase mDb; private Exporter mExporter; /** * @param db database */ public DatabaseLog(SQLiteDatabase db,String fileName) { mDb = db; try { Calendar cal = Calendar.getInstance(); //use date+time as filename e.g. 2013_04_03_13_23_49.backup if(TextUtils.isEmpty(fileName)){ fileName = cal.get(Calendar.YEAR)+"_"+cal.get(Calendar.MONTH)+"_"+cal.get(Calendar.DAY_OF_MONTH)+"_" +cal.get(Calendar.HOUR_OF_DAY)+"_"+cal.get(Calendar.MINUTE)+"_"+cal.get(Calendar.MINUTE); } fileName += ".backup"; File sdDir = Environment.getExternalStorageDirectory(); File theDir = new File(sdDir,mDestXmlFileDir); if (!theDir.exists()) { theDir.mkdirs(); } File picFile = new File(theDir,fileName); picFile.createNewFile(); FileOutputStream fOut = new FileOutputStream(picFile); BufferedOutputStream bos = new BufferedOutputStream(fOut); mExporter = new Exporter(bos); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } } /** * export */ public void exportData() { try { //1.先查找icon存放的目录复制所有图片到備份目錄下面 // 还原的时候检查这个栏位对应的文件是否存在,不存在则用backup下面的文件路径,然后update db mExporter.startDbExport(C_9510_PSMD_DBAdapter.DATABASE_NAME); //TODO export database and table exportTable("C_EVNT_EVNT"); exportTable("C_EVNT_PSON"); exportTable("R_EVNT_SEND"); exportTable("R_EVNT_RECV"); exportTable("C_TMPL_TYPE"); exportTable("C_TMPL_EVDS"); mExporter.endDbExport(); mExporter.close(); } catch (IOException e) { e.printStackTrace(); } } 转载请注明出处:http://blog.csdn.net/krislight
/**
*
* @param tableName
* @throws IOException
*/
private void exportTable(String tableName) throws IOException {
mExporter.startTable(tableName);
// get everything from the table
String sql = "select * from " + tableName;
Cursor cur = mDb.rawQuery(sql,new String[0]);
int numcols = cur.getColumnCount();
cur.moveToFirst();
// move through the table,creating rows // and adding each column with
// name and value
// to the row
while (cur.getPosition() < cur.getCount()) {
mExporter.startRow();
String name;
String val;
for (int idx = 0; idx < numcols; idx++) {
name = cur.getColumnName(idx);
val = cur.getString(idx);
mExporter.addColumn(name,val);
}
mExporter.endRow();
cur.moveToNext();
}
cur.close();
mExporter.endTable();
}
public class Exporter {
private static final String OPEN_XML_STANZA = "<?xml version="1.0" encoding="utf-8"?>";
private static final String CLOSING_WITH_TICK = "'>";
private static final String START_DB = "<export-database name='";
private static final String END_DB = "</export-database>";
private static final String START_TABLE = "<table name='";
private static final String END_TABLE = "</table>";
private static final String START_ROW = "<row>";
private static final String END_ROW = "</row>";
private static final String START_COL = "<col name='";
private static final String END_COL = "</col>";
private BufferedOutputStream mbufferos;
public String getFileName() {
return "";
}
public Exporter(BufferedOutputStream bos) {
mbufferos = bos;
}
public void close() throws IOException {
if (mbufferos != null) {
mbufferos.close();
}
}
public void startDbExport(String dbName) throws IOException {
StringBuffer sb = new StringBuffer();
sb.append(OPEN_XML_STANZA).append(START_DB).append(dbName).append(CLOSING_WITH_TICK);
mbufferos.write(sb.toString().getBytes());
}
public void endDbExport() throws IOException {
mbufferos.write(END_DB.getBytes());
}
public void startTable(String tableName) throws IOException {
StringBuffer sb = new StringBuffer();
sb.append(START_TABLE).append(tableName).append(CLOSING_WITH_TICK);
mbufferos.write(sb.toString().getBytes());
}
public void endTable() throws IOException {
mbufferos.write(END_TABLE.getBytes());
}
public void startRow() throws IOException {
mbufferos.write(START_ROW.getBytes());
}
public void endRow() throws IOException {
mbufferos.write(END_ROW.getBytes());
}
public void addColumn(String name,String val) throws IOException {
StringBuffer sb = new StringBuffer();
sb.append(START_COL).append(name).append(CLOSING_WITH_TICK).append(val).append(END_COL);
mbufferos.write(sb.toString().getBytes());
}
}
}
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |