前言:前篇已经讲了,如何将excel表格转化成db文件使用。不清楚的朋友可以看下我上篇的文章。然而在这里,主要说下怎么操作assserts目录下的db文件,进行对数据库的查询操作。废话不多说,开始吧!
步骤:
1,在项目中创建一个asserts 目录,有很多人都是手动添加文件夹,命名asserts,其实studio可以直接创建,如图
2,将创建好的.db文件拷贝到asserts目录,需要将db文件通过流的形式写入手机中,便于打开数据库,具体代码如下:
这里是将文件拷贝到手机里,以及查询数据库的操作
public class DBManager {
private String DB_NAME = "demo.db";
private Context mContext;
/*选择题的集合*/
public List mBeanLists = new ArrayList();
public DBManager(Context mContext) {
this.mContext = mContext;
}
//把assets目录下的db文件复制到dbpath下
public SQLiteDatabase DBManager(String packName) {
String dbPath = Environment.getExternalStorageDirectory().getAbsolutePath() + "/databases/" + DB_NAME;
if (!new File(dbPath).exists()) {
try {
boolean flag = new File(Environment.getExternalStorageDirectory().getAbsolutePath() + "/databases/").mkdirs();
boolean newFile = new File(dbPath).createNewFile();
try {
FileOutputStream out = new FileOutputStream(dbPath);
InputStream in = mContext.getAssets().open("demo.db");
byte[] buffer = new byte[1024];
int readBytes = 0;
while ((readBytes = in.read(buffer)) != -1)
out.write(buffer, 0, readBytes);
in.close();
out.close();
} catch (IOException e) {
e.printStackTrace();
}
} catch (IOException e) {
e.printStackTrace();
}
}
return SQLiteDatabase.openOrCreateDatabase(dbPath, null);
}
//查询选择题
public List query(SQLiteDatabase sqliteDB, String[] columns, String selection, String[] selectionArgs) {
Bean bean= null;
try {
String table = "bank";
Cursor cursor = sqliteDB.query(table, columns, selection, selectionArgs, null, null, null);
while (cursor.moveToNext()) {
String title = cursor.getString(cursor.getColumnIndex("title"));
String answer = cursor.getString(cursor.getColumnIndex("answer"));
String daan1 = cursor.getString(cursor.getColumnIndex("daan1"));
String daan2 = cursor.getString(cursor.getColumnIndex("daan2"));
String daan3 = cursor.getString(cursor.getColumnIndex("daan3"));
String daan4 = cursor.getString(cursor.getColumnIndex("daan4"));
bean= new Bean();
bean.setTitle(title);
bean.setAnswer(answer);
bean.setDaan1(daan1);
bean.setDaan2(daan2);
bean.setDaan3(daan3);
bean.setDaan4(daan4);
mBeanLists.add(bean);
}
cursor.close();
return mCityLists;
} catch (Exception e) {
e.printStackTrace();
}
return null;
}
3,在主Activity中怎么去查询数据库,以及展示数据呢?需要注意的是(
具体的查询语句,操作语句,耗时操作要放在子线程里处理)
new Thread(new Runnable() {
@Override
public void run() {
DBManager dbManager = new DBManager(NextActivity.this);
SQLiteDatabase sqLiteDatabase = dbManager.DBManager("com.yoyo.myapplication");
String[] columns = new String[]{"title", "answer","daan1","daan2","daan3","daan4"};
String selection = "title like '"+"%"+mKey+"%'";
List mCityLists = dbManager.query(sqLiteDatabase, columns, selection, null);
Message message = new Message();
message.what = DAN_XUAN;
message.obj = mCityLists;
handler.sendMessage(message);
sqLiteDatabase.close();
}
}).start();
4,查询完毕,回到handler里面做需求操作
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case DUI_CUO:
List mDuiCuoLists = (List) msg.obj;
Toast.makeText(NextActivity.this, "共" + mDuiCuoLists.size() + "题对错题", Toast.LENGTH_SHORT).show();
DuiCuoAdapter duiCuoAdapter = new DuiCuoAdapter(NextActivity.this, mDuiCuoLists);
mLv.setAdapter(duiCuoAdapter);
break;
case DAN_XUAN:
List mDanxuanLists = (List) msg.obj;
Toast.makeText(NextActivity.this, "共" + mDanxuanLists.size() + "题选择题", Toast.LENGTH_SHORT).show();
XuanZheAdapter adapter = new XuanZheAdapter(NextActivity.this, mDanxuanLists);
mLv.setAdapter(adapter);
break;
}
}
};