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
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.