zoukankan      html  css  js  c++  java
  • 備份Sqlite DB到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());
    		}
    	}
    }
    
  • 相关阅读:
    Docker可视化管理工具Portainer
    Spring Cloud,Docker书籍资源、优秀博文等记录
    Grafana部署监控docker服务
    Grafana+Prometheus通过node_exporter监控Linux服务器信息
    Prometheus+Grafana+kafka_exporter监控kafka
    k8s gpu 资源设置
    mysql 塞数据
    idea 插件
    ubuntu 升级内核
    清华镜像站安装docker
  • 原文地址:https://www.cnblogs.com/krislight1105/p/3748318.html
Copyright © 2011-2022 走看看