Android 如果读取asserts 中的db文件,并进行查询操作

    前言:前篇已经讲了,如何将excel表格转化成db文件使用。不清楚的朋友可以看下我上篇的文章。然而在这里,主要说下怎么操作assserts目录下的db文件,进行对数据库的查询操作。废话不多说,开始吧!

      步骤:

             1,在项目中创建一个asserts 目录,有很多人都是手动添加文件夹,命名asserts,其实studio可以直接创建,如图


         2,将创建好的.db文件拷贝到asserts目录,需要将db文件通过流的形式写入手机中,便于打开数据库,具体代码如下:

         这里是将文件拷贝到手机里,以及查询数据库的操作

[java]  view plain  copy
  1. public class DBManager {  
  2.     private String DB_NAME = "demo.db";  
  3.     private Context mContext;  
  4.     /*选择题的集合*/  
  5.     public List<Bean> mBeanLists = new ArrayList<Bean>();  
  6.     public DBManager(Context mContext) {  
  7.         this.mContext = mContext;  
  8.     }  
  9.     //把assets目录下的db文件复制到dbpath下  
  10.     public SQLiteDatabase DBManager(String packName) {  
  11.         String dbPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/databases/" + DB_NAME;  
  12.         if (!new File(dbPath).exists()) {  
  13.             try {  
  14.                 boolean flag = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/databases/").mkdirs();  
  15.                 boolean newFile = new File(dbPath).createNewFile();  
  16.                 try {  
  17.                     FileOutputStream out = new FileOutputStream(dbPath);  
  18.                     InputStream in = mContext.getAssets().open("demo.db");  
  19.                     byte[] buffer = new byte[1024];  
  20.                     int readBytes = 0;  
  21.                     while ((readBytes = in.read(buffer)) != -1)  
  22.                         out.write(buffer, 0, readBytes);  
  23.                     in.close();  
  24.                     out.close();  
  25.                 } catch (IOException e) {  
  26.                     e.printStackTrace();  
  27.                 }  
  28.             } catch (IOException e) {  
  29.                 e.printStackTrace();  
  30.             }  
  31.         }  
  32.         return SQLiteDatabase.openOrCreateDatabase(dbPath, null);  
  33.     }  
  34.     //查询选择题  
  35.     public List<Bean> query(SQLiteDatabase sqliteDB, String[] columns, String selection, String[] selectionArgs) {  
  36.         Bean bean= null;  
  37.         try {  
  38.             String table = "bank";  
  39.             Cursor cursor = sqliteDB.query(table, columns, selection, selectionArgs, nullnullnull);  
  40.             while (cursor.moveToNext()) {  
  41.                 String title = cursor.getString(cursor.getColumnIndex("title"));  
  42.                 String answer = cursor.getString(cursor.getColumnIndex("answer"));  
  43.                 String daan1 = cursor.getString(cursor.getColumnIndex("daan1"));  
  44.                 String daan2 = cursor.getString(cursor.getColumnIndex("daan2"));  
  45.                 String daan3 = cursor.getString(cursor.getColumnIndex("daan3"));  
  46.                 String daan4 = cursor.getString(cursor.getColumnIndex("daan4"));  
  47.                 bean= new Bean();  
  48.                 bean.setTitle(title);  
  49.                 bean.setAnswer(answer);  
  50.                 bean.setDaan1(daan1);  
  51.                 bean.setDaan2(daan2);  
  52.                 bean.setDaan3(daan3);  
  53.                 bean.setDaan4(daan4);  
  54.                 mBeanLists.add(bean);  
  55.             }  
  56.             cursor.close();  
  57.             return mCityLists;  
  58.         } catch (Exception e) {  
  59.             e.printStackTrace();  
  60.         }  
  61.         return null;  
  62.     }  
         3,在主Activity中怎么去查询数据库,以及展示数据呢?需要注意的是( 具体的查询语句,操作语句,耗时操作要放在子线程里处理

[java]  view plain  copy
  1. new Thread(new Runnable() {  
  2.             @Override  
  3.             public void run() {  
  4.                 DBManager dbManager = new DBManager(NextActivity.this);  
  5.                 SQLiteDatabase sqLiteDatabase = dbManager.DBManager("com.yoyo.myapplication");  
  6.                 String[] columns = new String[]{"title""answer","daan1","daan2","daan3","daan4"};  
  7.                 String selection = "title like '"+"%"+mKey+"%'";  
  8.                 List<City> mCityLists = dbManager.query(sqLiteDatabase, columns, selection, null);  
  9.                 Message message = new Message();  
  10.                 message.what = DAN_XUAN;  
  11.                 message.obj = mCityLists;  
  12.                 handler.sendMessage(message);  
  13.                 sqLiteDatabase.close();  
  14.             }  
  15.         }).start();  
        4,查询完毕,回到handler里面做需求操作

[java]  view plain  copy
  1. Handler handler = new Handler(){  
  2.         @Override  
  3.         public void handleMessage(Message msg) {  
  4.             super.handleMessage(msg);  
  5.             switch (msg.what){  
  6.                 case DUI_CUO:  
  7.                     List<DuiCuo> mDuiCuoLists = (List<DuiCuo>) msg.obj;  
  8.                     Toast.makeText(NextActivity.this"共" + mDuiCuoLists.size() + "题对错题", Toast.LENGTH_SHORT).show();  
  9.                     DuiCuoAdapter duiCuoAdapter = new DuiCuoAdapter(NextActivity.this, mDuiCuoLists);  
  10.                     mLv.setAdapter(duiCuoAdapter);  
  11.                     break;  
  12.                 case DAN_XUAN:  
  13.                     List<City> mDanxuanLists = (List<City>) msg.obj;  
  14.                     Toast.makeText(NextActivity.this"共" + mDanxuanLists.size() + "题选择题", Toast.LENGTH_SHORT).show();  
  15.                     XuanZheAdapter adapter = new XuanZheAdapter(NextActivity.this, mDanxuanLists);  
  16.                     mLv.setAdapter(adapter);  
  17.                     break;  
  18.             }  
  19.         }  
  20.     };  
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值