Android将数据库数据导出成excel格式的文本(CSV)

来源:互联网 发布:普吉岛打车软件 编辑:程序博客网 时间:2024/05/22 10:34

在做Android软件的时候往往随着时间的推移数据会越来越多,这个时候想要查看数据的时候到数据库里面去查看的话就会很麻烦,所以有时候需要将数据库里面的数据导出来用office打开看会更加方便。导出excel的使用Apache组织提供的POI来导出.xls格式的文件也是可以,但是也有一种很简单的方式就可以导出使用excel打开。

逗号分隔值(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号),其文件以纯文本形式存储表格数据(数字和文本)。以逗号的形式将数据保存在.txt的文件下,然后改一下扩展名改成.csv再用excel打开。


利用这个CSV就可以将Android数据库中的数据导出来,用excel打开。下面就以一个例子来应用一下。

一、创建数据库

package com.ruijie.dao;import android.content.Context;import android.database.sqlite.SQLiteDatabase;import android.database.sqlite.SQLiteOpenHelper;public class CreateDatabase extends SQLiteOpenHelper {private static final int DATABASE_VERSION = 1;public CreateDatabase(Context context) {super(context, "userInfo.db", null, DATABASE_VERSION);}@Overridepublic void onCreate(SQLiteDatabase db) {String sql = "create table user_inf(id integer primary key,username varchar(25),password varchar(100),address varchar(255))";db.execSQL(sql);}@Overridepublic void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {}}
二、操作数据库的dao方法

/** * 向数据库中插入数据 * @param user */public void insertUserInfo(User user) {db=helper.getWritableDatabase();String sql = "insert into user_inf values(null,?,?,?)";db.execSQL(sql, new String[]{user.getUsername(),user.getPassword(),user.getAddress()});}/** * 查询数据库中的用户 * @return */public List<User> exportToCSV() {db=helper.getWritableDatabase();String sql = "select * from user_inf ";Cursor cursor = db.rawQuery(sql, null);List<User> list = new ArrayList<User>();while(cursor.moveToNext()){User user = new User();user.setId(cursor.getInt(0));String username = cursor.getString(1);String password = cursor.getString(2);String address = cursor.getString(3);user.setUsername(username);user.setPassword(password);user.setAddress(address);list.add(user);}cursor.close();db.close();return list;}

三、向数据库中插入数据

<span style="white-space:pre"></span>String username = et_username.getText().toString().trim();String password = et_password.getText().toString().trim();String address = et_address.getText().toString().trim();User user = new User();user.setUsername(username);user.setPassword(password);user.setAddress(address);// 2 调用service方法将用户信息插入到数据中dao.insertUserInfo(user);et_username.setText("");et_password.setText("");et_address.setText("");Toast.makeText(getApplicationContext(), "用户信息插入成功!", Toast.LENGTH_SHORT).show();

四、将数据导出到SD卡

List<User> list = dao.exportToCSV();//System.out.println(list);StringBuffer buffer = new StringBuffer();buffer.append("用户id,姓名,密码,住址\r\n");for(User u:list){buffer.append(u.getId()+","+u.getUsername()+","+u.getPassword()+","+u.getAddress()+"\r\n");}try {//String data =new String(buffer.toString().getBytes("utf-8"), "ansi") ;String data = buffer.toString();String filename = "用户名单_"+new Date().toLocaleString()+".csv";String path = Environment.getExternalStorageDirectory()+"/Users";if (!new File(path).exists()) {new File(path).mkdirs();}File file = new File(path, filename);  OutputStream out=new FileOutputStream(file);  out.write(data.getBytes());  out.close();Toast.makeText(getApplicationContext(), "文件导出成功!请到SD卡中查看", 0).show();} catch (Exception e) {e.printStackTrace();} 
在这里导出的数据在Users文件夹下面,用excel打开的过程中出现了乱码,不知道为何,但是用notepad++打开数据又是正常的。。。不知道怎么回事。就开始在网上找方案了最终发现了问题:要在头部加BOM签名,因为BOM签名能否让excel认识这个文件时utf-8编码的。

找到问题所在就好吧了,加上:

<span style="white-space:pre"></span>byte b[] = {(byte)0xEF, (byte)0xBB, (byte)0xBF};out.write(b);

问题解决!最后附上源码下载:数据库数据导出excel


1 0
原创粉丝点击