android 数据库关系表导出xml文件

1、创建所有联系人实体表、群组实体表、关系表:

//所有联系人实体表
db.execSQL("create table user(id integer primary key autoincrement,name varchar(20),phone text,qq text,mail text,address text)");
//群组实体表
db.execSQL("create table groups(groupId integer primary key autoincrement,groupName varchar(20))");
//关系表
db.execSQL("create table relationship(relationshipId integer primary key autoincrement,groupName varchar(20),phone text)");

2、导出方法

//获取群组联系人信息
private  void queryGroups() {       
    DatabaseHelper dbHelper= new DatabaseHelper(MainActivity.this,"test_mars_db",2);  
    SQLiteDatabase db = dbHelper.getReadableDatabase();    
    Cursor groupsCursor = db.query("groups", new String[]{"groupId","groupName"}, null, null, null, null, null); 
    while(groupsCursor.moveToNext()){   
        System.out.println("groupName:"+groupsCursor.getString(groupsCursor.getColumnIndex("groupName")));
        Cursor relationshipCursor = db.query("relationship", new String[]{"phone"}, "groupName=?", new String[]{groupsCursor.getString(groupsCursor.getColumnIndex("groupName"))}, null, null, null);
        ArrayList<Person> persons = new ArrayList<Person>();
        int id = 0;
        while(relationshipCursor.moveToNext()){ 
            Cursor usersCursor = db.query("user", new String[]{"id","name","phone","qq","mail","address"}, "phone=?", new String[]{relationshipCursor.getString(relationshipCursor.getColumnIndex("phone"))}, null, null, null);            
            Person currentPerson = new Person();  
            while(usersCursor.moveToNext()){                
                currentPerson.setId(""+id++);
                currentPerson.setName(usersCursor.getString(usersCursor.getColumnIndex("name")));
                currentPerson.setPhone(usersCursor.getString(usersCursor.getColumnIndex("phone")));
                currentPerson.setQq(usersCursor.getString(usersCursor.getColumnIndex("qq")));
                currentPerson.setMail(usersCursor.getString(usersCursor.getColumnIndex("mail")));
                currentPerson.setAddress(usersCursor.getString(usersCursor.getColumnIndex("address")));
                persons.add(currentPerson);
            }   
            //一个群组生成一个xml文件 
            createXML(persons, Environment.getExternalStorageDirectory().toString() + "/lin/", groupsCursor.getString(groupsCursor.getColumnIndex("groupName"))+"群组");
        }       
    }
}

2、生成xml文件方法

//生成xml文件
public boolean createXML(List<Person> data, String localDir, String character) {  
    boolean bFlag = false;  
    String strTmpName = character + ".xml";  
    FileOutputStream fileos = null;    
    File newXmlFile = new File(localDir + strTmpName);  
    try {  
        if (newXmlFile.exists()) {  
           bFlag = newXmlFile.delete();  
        } else {  
           bFlag = true;  
        }  
        if (bFlag) {  
            if (newXmlFile.createNewFile()) {  
                fileos = new FileOutputStream(newXmlFile);  

                // we create a XmlSerializer in order to write xml data  
                XmlSerializer serializer = Xml.newSerializer();  

                // we set the FileOutputStream as output for the serializer,  
                // using UTF-8 encoding  
                serializer.setOutput(fileos, "UTF-8");  

                // <?xml version=”1.0″ encoding=”UTF-8″>  
                // Write <?xml declaration with encoding (if encoding not  
                // null) and standalone flag (if stan dalone not null)  
                // This method can only be called just after setOutput.  
                serializer.startDocument("UTF-8", null);  

                // start a tag called "root" 
                serializer.startTag(null, "Root"); 
                serializer.attribute(null, "character", character);                     
                serializer.startTag(null, "Persons");  
                for (Person person : data) {  
                    serializer.startTag(null, "Person");  
                    serializer.attribute(null, "id", person.getId()+"");  
                    serializer.attribute(null, "name", person.getName());  
                    serializer.attribute(null, "phone", person.getPhone());  
                    serializer.attribute(null, "qq", person.getQq());
                    serializer.attribute(null, "mail", person.getMail());  
                    serializer.attribute(null, "address", person.getAddress());  
                    serializer.endTag(null, "Person");
                 }  
                 serializer.endTag(null, "Persons");  
                 serializer.endTag(null, "Root");
                 serializer.endDocument();  

                 // write xml data into the FileOutputStream  
                 serializer.flush();  
                 // finally we close the file stream  
                 fileos.close();  
            }  
        }  
    } catch (Exception e) {  
            e.printStackTrace();
    }  
    return bFlag;  
}

3、添加读写SD卡权限

<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"/>

4、使用

queryGroups();

5、备注
①xml保存在sd卡的lin文件中
②xml文件名为“群组名”+群组

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值