Android实现Excel数据导入SQLlite,并用ListView展示。实现模糊查询


前言

今天朋友提出一个需求,有一个Excel表格,需要实现把每项数据展示出来,并且可以用某一项来进行查询筛选。首先我们应该思考如何把Excel上的数据存入数据库?我的思路是直接用工具转成数据库文件,复制到项目里面去,然后再查出来展示,这个时候就可以用查询语句来控制我们需要的数据了。

一、怎么把Excel转成数据库文件?

1、把Excel另存为.csv文件

2、然后用记事本打开,另存时选择编码为UTF-8

3、下载 SQLite Expert Professional 4 数据库管理工具
点击直接下载
4、新建数据库

5、选中数据库,右键选择 Import Text File

6、数据库文件在这里,直接复制到Android项目的assets目录下

7、补充 没有Assets文件夹,在Android studio中选中project结构下创建

二、代码实现

1、数据库文件
在android开发时,很多时候我们会使用可视化界面创建数据库,或者拿到别人的数据库使用,这时就需要我们将db文件手动加入到assets文件是夹中并读取。但是当我们把应用的apk部署到真机上的时候,已经创建好的数据库及其里边的数据是不能随着apk一起安装到真机上的。
解决方法很简单,只需要把assets目录下的db文件复制一份到SDCard中的”/data/data/” + packName + “/”目录下就可以了。
原文链接:https://blog.csdn.net/x15037308498/article/details/79458655

代码如下(示例):

public class SQLdm {//数据库存储路径//com.example.myapplication是你的包名//test.dbtest.db是你的数据库文件名称,一定要改成你自己的String filePath = "data/data/com.example.myapplication/test.db";//数据库存放的文件夹 data/data/com.example.myapplication 下面String pathStr = "data/data/com.example.myapplication";SQLiteDatabase database;public  SQLiteDatabase openDatabase(Context context){System.out.println("filePath:"+filePath);File jhPath=new File(filePath);//查看数据库文件是否存在if(jhPath.exists()){Log.i("test", "存在数据库");//存在则直接返回打开的数据库return SQLiteDatabase.openOrCreateDatabase(jhPath, null);}else{//不存在先创建文件夹File path=new File(pathStr);Log.i("test", "pathStr="+path);if (path.mkdir()){Log.i("test", "创建成功");}else{Log.i("test", "创建失败");};try {//得到资源AssetManager am= context.getAssets();//得到数据库的输入流InputStream is=am.open("test.db");Log.i("test", is+"");//用输出流写到SDcard上面FileOutputStream fos=new FileOutputStream(jhPath);Log.i("test", "fos="+fos);Log.i("test", "jhPath="+jhPath);//创建byte数组  用于1KB写一次byte[] buffer=new byte[1024];int count = 0;while((count = is.read(buffer))>0){Log.i("test", "得到");fos.write(buffer,0,count);}//最后关闭就可以了fos.flush();fos.close();is.close();} catch (IOException e) {// TODO Auto-generated catch blocke.printStackTrace();return null;}//如果没有这个数据库  我们已经把他写到SD卡上了,然后在执行一次这个方法 就可以返回数据库了return openDatabase(context);}}
}

2、创建和数据库字段对应的实体类

代码如下(示例):

public class Test {private String code;private String name;private String car;private Integer num;private Double price;public Test( String code, String name, String car, Integer num, Double price) {this.code = code;this.name = name;this.car = car;this.num = num;this.price = price;}public Test() {}public String getCode() {return code;}public void setCode(String code) {this.code = code;}public String getName() {return name;}public void setName(String name) {this.name = name;}public String getCar() {return car;}public void setCar(String car) {this.car = car;}public Integer getNum() {return num;}public void setNum(Integer num) {this.num = num;}public Double getPrice() {return price;}public void setPrice(Double price) {this.price = price;}
}

3、查询数据并展示

代码如下(示例):

public class MainActivity extends AppCompatActivity {//展示数据的listviewprivate ListView lv;//用来装查询到的数据private ArrayList<Test> testlist;//输入查询条件的输入框private EditText searchertextView;//查询按钮private Button find;//给模糊查询准备的字符串变量String s1 = "*";@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取到输入框searchertextView = (EditText) findViewById(R.id.text);、//获取到查询按钮find = findViewById(R.id.findtext);//程序启动先调用一次查询,先展示数据给用户zhanshi();//点击查询后调用find.setOnClickListener(new View.OnClickListener() {@Overridepublic void onClick(View view) {//若用户什么都没输入,直接全部查出来,要是有输入,就会拼接到//"select * from testt where Field_2 like '%"+ s1 +"%'"  进行查询s1 = searchertextView.getText().toString();zhanshi();System.out.println("执行了");}});}//把查询和填充提出来写成单独的方法@SuppressLint("Range")public void zhanshi(){testlist = new ArrayList<>();SQLdm s = new SQLdm();SQLiteDatabase db = s.openDatabase(getApplicationContext());Cursor cursor = db.rawQuery("select * from testt where Field_2 like '%"+ s1 +"%'",null);System.out.println(cursor.getColumnIndex("name")+"___________________________________________________");while(cursor.moveToNext()){String code;String name;String car;Integer num;Double price;code = cursor.getString(cursor.getColumnIndex("Field_2"));name = cursor.getString(cursor.getColumnIndex("Field_3"));car = cursor.getString(cursor.getColumnIndex("Field_4"));num = cursor.getInt(cursor.getColumnIndex("Field_5"));price = cursor.getDouble(cursor.getColumnIndex("Field_6"));Test st = new Test(code,name,car,num,price);testlist.add(st);}lv = (ListView)findViewById(R.id.zhanshi);lv.setAdapter(new BaseAdapter() {/** 为ListView设置一个适配器* getCount()返回数据个数* getView()为每一行设置一个条目* */@Overridepublic int getCount() {return testlist.size();}@Overridepublic Object getItem(int position) {// return testlist.get(position);return null;}@Overridepublic long getItemId(int position) {// return position;return 0;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {View view ;/**对ListView的优化,convertView为空时,创建一个新视图;* convertView不为空时,代表它是滚出,* 放入Recycler中的视图,若需要用到其他layout,* 则用inflate(),同一视图,用fiindViewBy()* **/if(convertView == null ){LayoutInflater inflater = MainActivity.this.getLayoutInflater();view = inflater.inflate(R.layout.item,null);//view = View.inflate(getBaseContext(),R.layout.item,null);}else{view = convertView;}//从studentlist中取出一行数据,position相当于数组下标,可以实现逐行取数据Test st = testlist.get(position);TextView code = (TextView)view.findViewById(R.id.code);TextView name  = (TextView)view.findViewById(R.id.name);TextView car = (TextView)view.findViewById(R.id.car);TextView num = (TextView)view.findViewById(R.id.num);TextView price = (TextView)view.findViewById(R.id.price);code.setText("编码:——" +st.getCode());name.setText("名称:——" +st.getName());car.setText("适用车型:——" +st.getCar());num.setText("数量:——" +st.getNum());price.setText("成本价格:——" +st.getPrice()+"");return view;}});}}

4、最后给出xml文件参考

4.1、activity_main.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"xmlns:app="http://schemas.android.com/apk/res-auto"xmlns:tools="http://schemas.android.com/tools"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"tools:context=".MainActivity"><LinearLayoutandroid:layout_width="match_parent"android:layout_height="60dp"><EditTextandroid:id="@+id/text"android:layout_width="320dp"android:layout_height="60dp"android:hint="请输入要查询的编码"></EditText><Buttonandroid:id="@+id/findtext"android:layout_width="70dp"android:layout_height="40dp"android:text="查询"></Button></LinearLayout><ListViewandroid:id="@+id/zhanshi"android:layout_width="match_parent"android:layout_height="wrap_content"tools:ignore="MissingConstraints"></ListView></LinearLayout>

4.1、item.xml

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"android:orientation="vertical"><TextViewandroid:id="@+id/code"android:layout_width="match_parent"android:layout_height="60dp"></TextView><TextViewandroid:id="@+id/name"android:layout_width="match_parent"android:layout_height="60dp"></TextView><TextViewandroid:id="@+id/car"android:layout_width="match_parent"android:layout_height="60dp"></TextView><TextViewandroid:id="@+id/num"android:layout_width="match_parent"android:layout_height="60dp"></TextView><TextViewandroid:id="@+id/price"android:layout_width="match_parent"android:layout_height="60dp"></TextView></LinearLayout>

5、总结

遇到问题不要害怕,先思考一个小时,如果一个小时都没有思路先放着,或者百度,或者请教别人。不管多难的问题,最终都会得到解决。

Android实现Excel数据导入SQLlite,并用ListView展示。并且实现模糊查询相关推荐

  1. 利用SQLite Expert 工具将Excel数据导入android数据库.db文件

    1.打开Excel,建立一张表.第一行(主键)一定要设置为id  2. 保存为CSV格式. 3.右键打开方式选择记事本打开我们新建的book.csv.将编码改为UTF-8,防止在模拟器上运行发生文字乱 ...

  2. android 读取excel数据并保存为xml文件

    今天,简单讲讲android如何  读取excel数据并保存为xml文件. 最近,我这边需要把客户翻译的Excel字符资源作为xml字符资源,当时自己是一个一个的复制,发现效率太低.后来,在网上搜 ...

  3. matlab在曲线给命名,matlab 利用xlsread画图,怎么将一组excel数据导入,通过matlab作图...

    Matlab 循环 for 语句 xlsread EXCEL表格数据导入 画图 Matlab的 xlsread() 函数可以将Excel数据到matlab工作空间,然后就可以根据读入据作图.下面给出操 ...

  4. 效率最高的Excel数据导入---(c#调用SSIS Package将数据库数据导入到Excel文件中【附源代码下载】)...

     本文目录: (一)背景 (二)数据库数据导入到Excel的方法比较    (三)SSIS的简介    (四)数据库中存储过程示例(SSIS应用需要) (五)Excel模板的制作(这步这么简单,稍微介 ...

  5. 批量Excel数据导入Oracle数据库

    由于一直基于Oracle数据库上做开发,因此常常会需要把大量的Excel数据导入到Oracle数据库中,其实如果从事SqlServer数据库的开发,那么思路也是一样的,本文主要介绍如何导入Excel数 ...

  6. python将EXCEL数据导入数据库时日期型数据变成数字并加.0的问题一行代码解决方案方案

    [问题描述]:python将EXCEL数据导入数据库时日期变成文本型数据并显示为数字格式 [解决方案] 数据源: codes: #!/usr/bin/python3 -- coding: utf-8 ...

  7. 效率最高的Excel数据导入续---SSIS Package包制作图解全过程

    目的:本文主要是详细讲解SSIS Package包的制作过程 本人买过的一张盗版windows 2003操作系统光盘上,上面自带有很详细的图文介绍,也就是傻瓜版的系统安装图解.因此,本文打算也是采用那 ...

  8. sql导入excel数据失败_nifi入门从Excel数据导入ES开始

    概述 nifi为不同系统间数据流动而生,其可视化的界面操作允许用户零编码实现不同系统间的数据流转.Nifi的架构如下图所示: NiFi在操作系统上的JVM内执行,JVM上NiFi的组件包括Web Se ...

  9. python接入excel_使用python将excel数据导入数据库过程详解

    因为需要对数据处理,将excel数据导入到数据库,记录一下过程. 使用到的库:xlrd 和 pymysql (如果需要写到excel可以使用xlwt) 直接丢代码,使用python3,注释比较清楚. ...

最新文章

  1. wxWidgets:wxGrid概览
  2. C#发送电子邮件 (异步) z
  3. BugkuCTF-MISC题猫片
  4. scrapy newspaper bug
  5. 数据分析没有思路怎么办
  6. [学习笔记] JQuery datepicker用法 [转]
  7. puppeteer-firefox 开启扩展
  8. Pannellum:实例之在部分视角内展示全景图
  9. python 散点图点击链接图片_Python数据可视化——散点图
  10. python爬虫案例
  11. SpringBoot+Vue实现前后端分离高校学生考勤系统
  12. virtual box linux 安装增强功能,在linux系统中安装virtualbox增强功能(增强包)的详细步骤...
  13. 用于屏幕对比图片jevin
  14. 爬虫类Chrome去除前端无限debugger反调试(轻松分析算法)
  15. three.js例子
  16. 单片机关于推挽输出和开漏输出
  17. 离散数学 (II) 习题 1
  18. ABAP GIT 使用教程
  19. NMS网络管理产品战略规划
  20. Golang常用工具类库

热门文章

  1. 【大数据】M1 mac win docker安装kafka+mysql+canal
  2. 从源码分析线程池(池化技术)的实现原理
  3. Linux: ------安装JDK、Tomcat、MySQL、Nginx、Tomcat负载均衡集群、Nginx负载均衡策略、MSM配置
  4. 那些年,我浏览的牛逼的网站
  5. 第11周—— 存储班长信息的学生类
  6. 第五周 静态成员应用 23
  7. 安卓开发项目(微信简单界面)
  8. C/C 零基础开发,实现五指棋游戏!小白也能学会
  9. 魔众一物一码溯源防伪系统 v1.0.0 一物一码溯源防伪系统发布
  10. SpringCloudAlibaba学习-加入Dubbo