exporting database file as text or xml in android

后端 未结 2 1105
悲哀的现实
悲哀的现实 2020-12-29 17:20

Hi I have been looking for days on how to export my database as a xml or text file but cant seem to find what I am looking for. All the tutorials and code snipets I have com

2条回答
  •  囚心锁ツ
    2020-12-29 18:02

    public class DataXmlExporter extends DataBaseDemoActivity {
    
       static final String DATASUBDIRECTORY = "bookwormdata";
    
      // private final SQLiteDatabase db;
       private XmlBuilder xmlBuilder;
       Button butt;
    
      /* public DataXmlExporter(final SQLiteDatabase db) {
          this.db = db;
    
       }*/
    
       public void onCreate(Bundle savedInstanceState)  {
           super.onCreate(savedInstanceState);
           setContentView(R.layout.main7);
    
    
      butt=(Button)findViewById(R.id.exportxml);
      String exportFileNamePrefix=exportxml;
        // public void export(final String dbName, final String exportFileNamePrefix) throws IOException {
          Log.i(Constants._COUNT, "exporting database - " + dbname + " exportFileNamePrefix=" + exportFileNamePrefix);
    
          try {
            xmlBuilder = new XmlBuilder();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          xmlBuilder.start(dbname);
    
          // get the tables
          String sql = "select * from dept";
          Cursor c = db.rawQuery(sql, new String[0]);
    
          if (c.moveToFirst()) {
    
              //while (c.moveToNext()) {
                String tableName ="dept";//c.getString(c.getColumnIndex("dep_id"));
    
                // skip metadata, sequence, and uidx (unique indexes)
                if (!tableName.equals("android_metadata") && !tableName.equals("sqlite_sequence")
                         && !tableName.startsWith("uidx")) {
                   try {
                    exportTable(tableName);
                } catch (IOException e) {
                    // TODO Auto-generated catch block
                    e.printStackTrace();
                }
                }
             // }
            }
          String xmlString = null;
        try {
            xmlString = xmlBuilder.end();
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          try {
            writeToFile(xmlString, exportFileNamePrefix + ".xml");
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
          Log.i(Constants._COUNT, "exporting database complete");
          Toast.makeText(DataXmlExporter.this, "DB xml backup Successfully", 2000).show();
    
          butt.setOnClickListener(new View.OnClickListener() {
    
                public void onClick(View v) {
                    // TODO Auto-generated method stub
                    Intent intent = new Intent(DataXmlExporter.this, DataBaseDemoActivity.class);
                    startActivity(intent);
                            }
            });
       }
    
       private void exportTable(final String tableName) throws IOException {
          xmlBuilder.openTable(tableName);
          String sql = "select * from " + tableName;
          Cursor c = db.rawQuery(sql, new String[0]);
          if (c.moveToFirst()) {
             int cols = c.getColumnCount();
             do {
                xmlBuilder.openRow();
                for (int i = 0; i < cols; i++) {
                    /*if(i==6)
                    {
                        //String id = c.getString( c.getColumnIndex("photo"));
                        String str = new String(image);
                        xmlBuilder.addColumn(c.getColumnName(i), str);
                    }*/
                   xmlBuilder.addColumn(c.getColumnName(i), c.getString(i));
                }
                xmlBuilder.closeRow();
             } while (c.moveToNext());
          }
          c.close();
          xmlBuilder.closeTable();
       }
    
       private void writeToFile(final String xmlString, final String exportFileName) throws IOException {
          File dir = new File(Environment.getExternalStorageDirectory(), DataXmlExporter.DATASUBDIRECTORY);
          if (!dir.exists()) {
             dir.mkdirs();
          }
          File file = new File(dir, exportFileName);
          file.createNewFile();
    
          ByteBuffer buff = ByteBuffer.wrap(xmlString.getBytes());
          FileChannel channel = new FileOutputStream(file).getChannel();
          try {
             channel.write(buff);
          } finally {
             if (channel != null) {
                channel.close();
             }
          }
       }
    
       /**
        * XmlBuilder is used to write XML tags (open and close, and a few attributes)
        * to a StringBuilder. Here we have nothing to do with IO or SQL, just a fancy StringBuilder. 
        * 
        * @author ccollins
        *
        */
       static class XmlBuilder {
          private static final String OPEN_XML_STANZA = "";
          private static final String CLOSE_WITH_TICK = "'>";
          private static final String DB_OPEN = "

    Try this. It's work for me.

提交回复
热议问题