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

在做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 exportToCSV() {db=helper.getWritableDatabase();String sql = "select * from user_inf ";Cursor cursor = db.rawQuery(sql, null);List list = new ArrayList();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;}

三、向数据库中插入数据

			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 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编码的。

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

				byte b[] = {(byte)0xEF, (byte)0xBB, (byte)0xBF};out.write(b);

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



本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部