在做android的开发的时候,将数据保存到SQLite数据库中,有时候会要将保存的这些数据导出成excel表格,这样更方便查看。通过查找资料,可以将数据库中的表格转化成

csv(Comma-Separated Values,CSV,有时也称为字符分隔值,因为分隔字符也可以不是逗号)这种以纯文本的模式保存表格。还是以以前写的一个模板来实现点击打开链接,这里就不放这个的代码了,直接说将表格转化成csv格式导出。

isi.java

package com.example.project_isi;import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.io.IOException;import android.app.Activity;
import android.app.AlertDialog;
import android.content.Intent;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.View.OnTouchListener;
import android.view.Window;
import android.widget.Button;
import android.widget.RadioButton;
import android.widget.RadioGroup;
import android.widget.RadioGroup.OnCheckedChangeListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
import android.widget.Toast;public class ISIActivity extends Activity{private RelativeLayout rl;private RelativeLayout rl2;private int i = 0;private String[] question = {"1、入睡困难:","2、维持睡眠困难:","3、早醒:","4、您对目前的睡眠模式满意/不满意程度如何?:","5、您认为您的失眠在多大程度上影响了您的日常功能:","6、您的失眠问题影响了您的生活质量,您觉得在别人眼中你的失眠程度如何?","7、您对目前的睡眠问题的担心/痛苦程度:","您的得分:"};private Button resultbutton;private int j;private String buttontext;private int resulttext[] = new int[10];private RadioButton button01;private RadioButton button02;private RadioButton button03;private RadioButton button04;private RadioButton button05;private RadioGroup radioGroup;private TextView questiontext;private int score;private Button databutton;@Overrideprotected void onCreate(Bundle savedInstanceState) {this.requestWindowFeature(Window.FEATURE_NO_TITLE);super.onCreate(savedInstanceState);setContentView(R.layout.isi);questiontext = (TextView) findViewById(R.id.questiontitle);radioGroup = (RadioGroup) findViewById(R.id.radiogroup);button01 = (RadioButton) findViewById(R.id.button01);button02 = (RadioButton) findViewById(R.id.button02);button03 = (RadioButton) findViewById(R.id.button03);button04 = (RadioButton) findViewById(R.id.button04);button05 = (RadioButton) findViewById(R.id.button05);databutton = (Button) findViewById(R.id.databutton);rl = (RelativeLayout) findViewById(R.id.relativeLayout);rl2 = (RelativeLayout) findViewById(R.id.relativeLayout2);radioGroup.setOnCheckedChangeListener(new RadioGroupListener());rl.setOnTouchListener(new OnTouchListener() {@Overridepublic boolean onTouch(View arg0, MotionEvent arg1) {rl.setVisibility(View.INVISIBLE);rl2.setVisibility(View.VISIBLE);return false;}});databutton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {// TODO Auto-generated method stubIntent intent = new Intent();intent.setClass(ISIActivity.this, PatientInfoManage.class);startActivity(intent);}});final Button nextbutton = (Button) findViewById(R.id.nextbutton);nextbutton.setOnClickListener(new OnClickListener() {@Overridepublic void onClick(View v) {//questiontext.setText(question[i]); //i ++;if(button01.isChecked()==false && button02.isChecked()==false && button03.isChecked()==false&& button04.isChecked()==false&& button05.isChecked()==false && i != 0){new AlertDialog.Builder(ISIActivity.this).setTitle("温馨提示").setMessage("您还没有选择任何一个选项!").setPositiveButton("确定", null).show();return;}else{questiontext.setText(question[i]);    if(i < question.length +1){i++;}if(i == 1){radioGroup.setVisibility(View.VISIBLE);}//i++;radioGroup.clearCheck();}score += j;System.out.println("result----->" + score);resulttext[i]= j;System.out.println("选择的结果----》" + resulttext[i]);//PInformation();//question[7] = "您的得分: " + score;if(i == question.length - 1){nextbutton.setText("确定");//score += j;int total = score +j;question[7] = "您的得分: " + total;System.out.println("您的得分---" + total);//PInformation();//finish();}if(i == question.length ){//finish();PInformation();radioGroup.setVisibility(View.INVISIBLE);nextbutton.setVisibility(View.INVISIBLE);}}});}public class RadioGroupListener implements OnCheckedChangeListener{@Overridepublic void onCheckedChanged(RadioGroup group, int checkedId) {if(checkedId == button01.getId()){j = 0;buttontext = button01.getText().toString();System.out.println("buttontext ---" + buttontext);}if(checkedId == button02.getId()){j = 1;System.out.println("result11----->" + j);buttontext = button02.getText().toString();System.out.println("buttontext ---" + buttontext);}if(checkedId == button03.getId()){j = 2;buttontext = button03.getText().toString();System.out.println("buttontext ---" + buttontext);}if(checkedId == button04.getId()){j = 3;buttontext = button04.getText().toString();System.out.println("buttontext ---" + buttontext);}if(checkedId == button05.getId()){j = 4;buttontext = button05.getText().toString();System.out.println("buttontext ---" + buttontext);}}}//获得要保存的数据public void PInformation(){int[] result = new int[8];result[0] = resulttext[2];result[1] = resulttext[3];result[2] = resulttext[4];result[3] = resulttext[5];result[4] = resulttext[6];result[5] = resulttext[7];result[6] = resulttext[8];result[7] = score;String isi = "";for(int i = 0;i < result.length;i++){isi += String.valueOf(result[i]);}System.out.println("严重失眠指数----->" + isi);PatientTest patientTest = new PatientTest();patientTest.setIsi(isi);PatientTestDAO ptdao = new PatientTestDAO(ISIActivity.this);//获得最大的id//PatientInformationDAO pd = new PatientInformationDAO(ISIActivity.this);ptdao.insert(patientTest);System.out.println("当前ID----" + ptdao.getMaxId());Toast.makeText(ISIActivity.this, "【失眠程度评估】数据保存成功!", Toast.LENGTH_SHORT).show();////String test_table = null;Cursor c = ptdao.export();ExportToCSV(c, "test_table.csv");}//导出表格的方法public void ExportToCSV(Cursor c, String fileName) {int rowCount = 0;int colCount = 0;FileWriter fw;BufferedWriter bfw;//获取sd卡根目录File sdCardDir = Environment.getExternalStorageDirectory();//保存文件目录File saveFile = new File(sdCardDir, fileName);try {rowCount = c.getCount();colCount = c.getColumnCount();fw = new FileWriter(saveFile);bfw = new BufferedWriter(fw);if (rowCount > 0) {c.moveToFirst();// 写入表头for (int i = 0; i < colCount; i++) {if (i != colCount - 1)bfw.write(c.getColumnName(i) + ',');elsebfw.write(c.getColumnName(i));}// 写好表头后换行bfw.newLine();// 写入数据for (int i = 0; i < rowCount; i++) {c.moveToPosition(i);// Toast.makeText(mContext, "正在导出第"+(i+1)+"条",// Toast.LENGTH_SHORT).show();Log.v("导出数据", "正在导出第" + (i + 1) + "条");for (int j = 0; j < colCount; j++) {if (j != colCount - 1)bfw.write(c.getString(j) + ',');elsebfw.write(c.getString(j));}// 写好每条记录后换行bfw.newLine();}}// 将缓存数据写入文件bfw.flush();// 释放缓存bfw.close();// Toast.makeText(mContext, "导出完毕!", Toast.LENGTH_SHORT).show();Log.v("导出数据", "导出完毕!");} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();} finally {c.close();}}}

上面有很多代码都是以前保存选项信息的代码,主要是最后一个方法实现格式的转化。

要在AndroidManifest.xml加上一句对文件的允许对sd卡可写

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

最后得到的文件名为test_table.csv,用excel打开得到的表格如下:

数据完整的转化成了excel表格了。

然后是解析csv文件,这个没有布局文件,

Mainactivity.java,由于csv文件是用“,”分开的,在程序中就可以利用“,”将其分割开。

package com.example.testlistview;import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.util.StringTokenizer;import android.app.Activity;
import android.os.Bundle;
import android.os.Environment;public class MainActivity extends Activity {//获得根目录路径File sdCardDir = Environment.getExternalStorageDirectory();int i = 0;int j = 0;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);try { File csv = new File(sdCardDir + "/test_table.csv"); // CSV文件BufferedReader br = new BufferedReader(new FileReader(csv));br.readLine();// 读取直到最后一行 String line = ""; //这一行不为空while ((line = br.readLine()) != null) { i++;//System.out.println("line---" + line);// 把一行数据分割成多个字段 StringTokenizer st = new StringTokenizer(line, ",");//遍历所有行,并打印出来,判断有没有分隔符while (st.hasMoreTokens()) { //j++;// 每一行的多个字段用TAB隔开表示 //s[i] = st.nextToken();System.out.print(st.nextToken()); // System.out.println("j ---" + j);} System.out.println();
//              String item[] = line.split(",");//CSV格式文件为逗号分隔符文件,这里根据逗号切分
//
//                String last = item[item.length-1];//这就是你要的数据了
//                j = item.length;
//                System.out.println(last);} System.out.println("i----" + i);System.out.println("j----" + j);br.close();} catch (Exception e) { // 捕获File对象生成时的异常 e.printStackTrace(); }}
}

最后打印出来的数据为

这样数据就完整的转换过来了。

android 将SQLite数据库的表格导出为csv格式,并解析csv文件相关推荐

  1. Android整合SQLite数据库进行基本的增删改查

    简言 使用Android整合SQLite数据库进行数据存储,大致可以划分为三步: ①继承 SQLiteOpenHelper,创建数据库 ②继承 ContentProvider 类,重写方法 ③在清单文 ...

  2. android sqlite 操作类封装,SQLiteUtils 一个简单的基于 Android 的 Sqlite 数据库的操作封装库 @codeKK Android开源站...

    一个简单的基于 Android 的 Sqlite 数据库的操作封装,它有如下的好处: 便捷地创建表和增添表字段 通过操作对象来 insert 或者 update 表记录 支持多种查询方式,支持分页查询 ...

  3. Android studio—SQlite数据库注册登录

    Android studio-SQlite数据库注册登录 文章目录 Android studio-SQlite数据库注册登录 创建用户类 创建数据库 注册写入数据库 登录读取数据库 效果展示 布局文件 ...

  4. Android Studio SQLite数据库应用(一)

    Android Studio SQLite数据库应用(一) 版本:Android Studio 1.5.1 创建数据库 升级数据库 CRUD数据操作 SQLite (英语发音:/ˌɛskjuːɛlˈl ...

  5. Android中SQLite数据库查看及导入导出

    Android中可以采用SQLite数据库来存储数据,可是Google却没有直接给我们提供相关工具来管理数据库里的数据. 如果不能直接通过工具来查看,那我们就把数据库从手机/模拟器里面拷贝出来用工具查 ...

  6. Android之SQLite数据库及SQLiteStudio工具的使用

    目录 (一)SQLite介绍 (二)SQLite的使用 1.SQLiteOpenHelper抽象类 2.SQLiteDatabase类操作SQLite数据库 (三)数据库实例 (四)SQLite数据的 ...

  7. Android Studio SQLite 数据库 增删改查 简单

    源码 效果展示     所有操作都在这个界面完成,操作完直接显示 设计     一个class用来创建数据库,建表,一个activity用来执行增删改查操作 代码 DatebaseHlper impo ...

  8. SQLite数据库导入和导出

    学习android开发快一个月了,手头上有个项目要用到SQLite数据库,所以在网上搜了下并结合自己的体会总结了一下关于SQLite数据库的导入和导出的知识. 新建student.bat脚本文件和st ...

  9. android数据库isnull,Android中SQLite数据库知识点总结

    SQLite 数据库简介 SQLite 是一个轻量级数据库,它是D. Richard Hipp建立的公有领域项目,在2000年发布了第一个版本.它的设计目标是嵌入式的,而且占用资源非常低,在内存中只需 ...

最新文章

  1. Centos 7 安装 Haproxy
  2. Docker安装与镜像,容器命令管理
  3. 新一代需求管理工具Trufun Bacon X正式发布!
  4. 31省份开学时间一览表
  5. dbv mysql_MariaDB与MySQL对比 --- 对分布式事务的支持
  6. win11如何取消开机自检 windows11取消开机自检的设置方法
  7. c语言教程入门ppt,C语言基础入门教程.ppt
  8. Android 测试点归纳总结
  9. Python常用的软件包
  10. CodeForces - 1384
  11. 测绘资质升级申请条件有哪些要求?
  12. nba app android,NBA app官方版
  13. 烧录器DediWare General使用方法
  14. 将Latex tex文档转换成 word文档(下)
  15. 树莓派存储方案_还在用笨重的NAS存储服务器?你可以自己动手用树莓派DIY一个...
  16. 顺丰快递代码表java_JAVA接入顺丰快递
  17. 最新的SpringCloud(H版Alibaba)技术(11-12初级部分,网关【Gateway】)
  18. python爬虫Pragmatic系列III
  19. 一段真实在个人经历 给那些迷失方向的朋友 转帖
  20. Boost日期时间(date_time)—时间

热门文章

  1. Cpp 对象模型探索 / 继承关系下的虚函数手动调用
  2. spark 算子使用类变量_自己工作中超全spark性能优化总结
  3. mysql window怎么安装补丁_window下mysql安装步骤
  4. c#调用python函数_C#调用python脚本的方法步骤(2种)
  5. 反编译exe软件_【娱乐向】exe逆向工程(破译《游戏开发课》老师的成绩程序)...
  6. linux generic什么意思_如何在 Ubuntu Linux 上释放 /boot 分区的空间? | Linux 中国
  7. 最短路径之--floyd算法--多源最短路径
  8. 组件与组件之间的通信以及vue2.0中的变化、示例
  9. error=Error Domain=NSURLErrorDomain Code=-1003
  10. 剑指offer——不能被继承的类