Android将数据库数据导出成excel格式的文本(CSV)
生活随笔
收集整理的這篇文章主要介紹了
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<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
總結
以上是生活随笔為你收集整理的Android将数据库数据导出成excel格式的文本(CSV)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 请问和是什么偏旁?怎么读?
- 下一篇: 可以节约很多代码的几个正则表达式