日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發(fā)布時(shí)間:2024/10/8 Android 37 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Android将数据库数据导出成excel格式的文本(CSV) 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

在做Android軟件的時(shí)候往往隨著時(shí)間的推移數(shù)據(jù)會(huì)越來越多,這個(gè)時(shí)候想要查看數(shù)據(jù)的時(shí)候到數(shù)據(jù)庫里面去查看的話就會(huì)很麻煩,所以有時(shí)候需要將數(shù)據(jù)庫里面的數(shù)據(jù)導(dǎo)出來用office打開看會(huì)更加方便。導(dǎo)出excel的使用Apache組織提供的POI來導(dǎo)出.xls格式的文件也是可以,但是也有一種很簡(jiǎn)單的方式就可以導(dǎo)出使用excel打開。

逗號(hào)分隔值(Comma-Separated Values,CSV,有時(shí)也稱為字符分隔值,因?yàn)榉指糇址部梢圆皇嵌禾?hào)),其文件以純文本形式存儲(chǔ)表格數(shù)據(jù)(數(shù)字和文本)。以逗號(hào)的形式將數(shù)據(jù)保存在.txt的文件下,然后改一下擴(kuò)展名改成.csv再用excel打開。


利用這個(gè)CSV就可以將Android數(shù)據(jù)庫中的數(shù)據(jù)導(dǎo)出來,用excel打開。下面就以一個(gè)例子來應(yīng)用一下。

一、創(chuàng)建數(shù)據(jù)庫

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) {}} 二、操作數(shù)據(jù)庫的dao方法

/*** 向數(shù)據(jù)庫中插入數(shù)據(jù)* @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()});}/*** 查詢數(shù)據(jù)庫中的用戶* @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;}
三、向數(shù)據(jù)庫中插入數(shù)據(jù)

<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 調(diào)用service方法將用戶信息插入到數(shù)據(jù)中dao.insertUserInfo(user);et_username.setText("");et_password.setText("");et_address.setText("");Toast.makeText(getApplicationContext(), "用戶信息插入成功!", Toast.LENGTH_SHORT).show();
四、將數(shù)據(jù)導(dǎo)出到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(), "文件導(dǎo)出成功!請(qǐng)到SD卡中查看", 0).show();} catch (Exception e) {e.printStackTrace();} 在這里導(dǎo)出的數(shù)據(jù)在Users文件夾下面,用excel打開的過程中出現(xiàn)了亂碼,不知道為何,但是用notepad++打開數(shù)據(jù)又是正常的。。。不知道怎么回事。就開始在網(wǎng)上找方案了最終發(fā)現(xiàn)了問題: 要在頭部加BOM簽名,因?yàn)锽OM簽名能否讓excel認(rèn)識(shí)這個(gè)文件時(shí)utf-8編碼的。

找到問題所在就好吧了,加上:

<span style="white-space:pre"> </span>byte b[] = {(byte)0xEF, (byte)0xBB, (byte)0xBF};out.write(b);
問題解決!最后附上源碼下載: 數(shù)據(jù)庫數(shù)據(jù)導(dǎo)出excel


總結(jié)

以上是生活随笔為你收集整理的Android将数据库数据导出成excel格式的文本(CSV)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。