将Android SQLite db 文件转化成xml保存在xml

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6


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 to
			File 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 table
		String 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 row
		while( 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 first
newStr = newStr.replaceAll(”&”, “&”);
}

if (newStr.contains(”<”)) {
newStr = newStr.replaceAll(”")) {
newStr = newStr.replaceAll(”>”, “>”);
}

if (newStr.contains(”\”")) {
newStr = newStr.replaceAll(”\”", “"”);
}

if (newStr.contains(”‘”)) {
newStr = newStr.replaceAll(”‘”, “'”);
}

return newStr;
}

 

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

阿里云国内75折 回扣 微信号:monov8
阿里云国际,腾讯云国际,低至75折。AWS 93折 免费开户实名账号 代冲值 优惠多多 微信号:monov8 飞机:@monov6
标签: android

“将Android SQLite db 文件转化成xml保存在xml” 的相关文章

怎么使用Maven打包构建Docker镜像并推送到仓库 - 开发技术

这篇文章主要介绍了怎么使用Maven打包构建Docker镜像并推送到仓库的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇怎么使用Maven打包构建Docker镜像并推送到仓库文章都会有所收获,下面我们一起来看看吧。一,服务器Docker配置...

PyTorch与PyTorch Geometric的安装过程是什么 - 开发技术

这篇文章主要讲解了“PyTorch与PyTorch Geometric的安装过程是什么”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“PyTorch与PyTorch Geometric的安装过程是什么...

centos安装g++

yum install gcc gcc-c++...

UVa 102 Ecological Bin Packing (water ver.)

102 - Ecological Bin PackingTime limit: 3.000 secondshttp://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=24&pag...

怎么用Python整理复杂的文件夹 - 编程语言

这篇文章主要介绍“怎么用Python整理复杂的文件夹”,在日常操作中,相信很多人在怎么用Python整理复杂的文件夹问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么用Python整理复杂的文件夹”的疑惑有所帮助!接下来,请跟着小编一起...

国内为什么封禁chatGPT - 开发技术

这篇“国内为什么封禁chatGPT”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“国内为什么封禁chatGPT”文章吧。ChatGPT是一种基于深度学习的...