public class DatabaseAssistant{private static final String EXPORT_FILE_NAME = "/sdcard/export.xml";private Context _ctx;private SQLiteDatabase _db;private Exporter _exporter;public DatabaseAssistant( Context ctx, SQLiteDatabase db ){_ctx = ctx;_db = db;try{// create a file on the sdcard to export the// database contents toFile myFile = new File( EXPORT_FILE_NAME );                        myFile.createNewFile();                        FileOutputStream fOut =  new FileOutputStream(myFile);                        BufferedOutputStream bos = new BufferedOutputStream( fOut );_exporter = new Exporter( bos );}catch (FileNotFoundException e){e.printStackTrace();}catch (IOException e){e.printStackTrace();}}public void exportData( ){log( "Exporting Data" );try{_exporter.startDbExport( _db.getPath() );// get the tables out of the given sqlite database            String sql = "SELECT * FROM sqlite_master";            Cursor cur = _db.rawQuery( sql, new String[0] );            Log.d("db", "show tables, cur size " + cur.getCount() );            cur.moveToFirst();            String tableName;            while ( cur.getPosition() < cur.getCount() )            {            tableName = cur.getString( cur.getColumnIndex( "name" ) );            log( "table name " + tableName );            // don't process these two tables since they are used            // for metadata            if ( ! tableName.equals( "android_metadata" ) &&    ! tableName.equals( "sqlite_sequence" ) )            {            exportTable( tableName );            }            cur.moveToNext();            }        _exporter.endDbExport();_exporter.close();}catch (IOException e){e.printStackTrace();}}private void exportTable( String tableName ) throws IOException{_exporter.startTable(tableName);// get everything from the tableString sql = "select * from " + tableName;Cursor cur = _db.rawQuery( sql, new String[0] );int numcols = cur.getColumnCount();log( "Start exporting table " + tableName );//// logging//for( int idx = 0; idx < numcols; idx++ )//{//log( "column " + cur.getColumnName(idx) );//}cur.moveToFirst();// move through the table, creating rows// and adding each column with name and value// to the rowwhile( cur.getPosition() < cur.getCount() ){_exporter.startRow();String name;String val;for( int idx = 0; idx < numcols; idx++ ){name = cur.getColumnName(idx);val = cur.getString( idx );log( "col '" + name + "' -- val '" + val + "'" );_exporter.addColumn( name, val );}_exporter.endRow();cur.moveToNext();}cur.close();_exporter.endTable();}private void log( String msg ){Log.d( "DatabaseAssistant", msg );}class Exporter{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 _bos;public Exporter() throws FileNotFoundException{this( new BufferedOutputStream(_ctx.openFileOutput( EXPORT_FILE_NAME,Context.MODE_WORLD_READABLE ) ) );}public Exporter( BufferedOutputStream bos ){_bos = bos;}public void close() throws IOException{if ( _bos != null ){_bos.close();}}public void startDbExport( String dbName ) throws IOException{String stg = START_DB + dbName + CLOSING_WITH_TICK;_bos.write( stg.getBytes() );}public void endDbExport() throws IOException{_bos.write( END_DB.getBytes() );}public void startTable( String tableName ) throws IOException{String stg = START_TABLE + tableName + CLOSING_WITH_TICK;_bos.write( stg.getBytes() );}public void endTable() throws IOException{_bos.write( END_TABLE.getBytes() );}public void startRow() throws IOException{_bos.write( START_ROW.getBytes() );}public void endRow() throws IOException{_bos.write( END_ROW.getBytes() );}public void addColumn( String name, String val ) throws IOException{String stg = START_COL + name + CLOSING_WITH_TICK + val + END_COL;_bos.write( stg.getBytes() );}}class Importer{}

public String checkForIllegalChars(String val) {String newStr = val;if (newStr.contains(”&”)) { //make sure we do this check firstnewStr = newStr.replaceAll(”&”, “&”);}if (newStr.contains(”<”)) {newStr = newStr.replaceAll(”")) {newStr = newStr.replaceAll(”>”, “>”);}if (newStr.contains(”\”")) {newStr = newStr.replaceAll(”\”", “"”);}if (newStr.contains(”‘”)) {newStr = newStr.replaceAll(”‘”, “&apos;”);}return newStr;}

上面的代码是检查一下 有没有非法写入xml的字符。

更多相关文章

  1. 罗列一些 android中的常用模块和方法
  2. 在Android(安卓)Studio中导入jar包
  3. Android中js和原生交互的示例代码
  4. 获取Android(安卓)IP信息
  5. Android(安卓)HttpClient
  6. Android(安卓)Studio 3.0新建项目AAPT2 编译报错 Error:java.uti
  7. Android断点续传核心代码
  8. Android之Hello WebView
  9. Android定时器和倒计时实现淘宝秒杀功能

随机推荐

  1. ORA-19566 exceeded limit of 0 corrupt
  2. Oracle 中 Object_iD 和 Data_Object_ID
  3. Linux下绑定网卡的操作记录
  4. mysql必知必会第一节
  5. mysql硬件优化
  6. Oracle dblink介绍
  7. python入门教程07-02 (python语法入门之函
  8. MySIAM与Innodb引擎
  9. Linux下通过受限bash创建指定权限的账号
  10. mysql中utf8和utf8mb4区别