Android 如果读取asserts 中的db文件,并进行查询操作
2016-11-30 12:17
507 查看
前言:前篇已经讲了,如何将excel表格转化成db文件使用。不清楚的朋友可以看下我上篇的文章。然而在这里,主要说下怎么操作assserts目录下的db文件,进行对数据库的查询操作。废话不多说,开始吧!
步骤:
1,在项目中创建一个asserts 目录,有很多人都是手动添加文件夹,命名asserts,其实studio可以直接创建,如图
![](https://oscdn.geek-share.com/Uploads/Images/Content/201609/c64b9e7561f58e7f27a616ad8373153c)
2,将创建好的.db文件拷贝到asserts目录,需要将db文件通过流的形式写入手机中,便于打开数据库,具体代码如下:
这里是将文件拷贝到手机里,以及查询数据库的操作
[java] view
plain copy
public class DBManager {
private String DB_NAME = "demo.db";
private Context mContext;
/*选择题的集合*/
public List<Bean> mBeanLists = new ArrayList<Bean>();
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<Bean> 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中怎么去查询数据库,以及展示数据呢?需要注意的是(具体的查询语句,操作语句,耗时操作要放在子线程里处理)
[java] view
plain copy
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<City> 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里面做需求操作
[java] view
plain copy
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case DUI_CUO:
List<DuiCuo> mDuiCuoLists = (List<DuiCuo>) 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<City> mDanxuanLists = (List<City>) msg.obj;
Toast.makeText(NextActivity.this, "共" + mDanxuanLists.size() + "题选择题", Toast.LENGTH_SHORT).show();
XuanZheAdapter adapter = new XuanZheAdapter(NextActivity.this, mDanxuanLists);
mLv.setAdapter(adapter);
break;
}
}
};
步骤:
1,在项目中创建一个asserts 目录,有很多人都是手动添加文件夹,命名asserts,其实studio可以直接创建,如图
2,将创建好的.db文件拷贝到asserts目录,需要将db文件通过流的形式写入手机中,便于打开数据库,具体代码如下:
这里是将文件拷贝到手机里,以及查询数据库的操作
[java] view
plain copy
public class DBManager {
private String DB_NAME = "demo.db";
private Context mContext;
/*选择题的集合*/
public List<Bean> mBeanLists = new ArrayList<Bean>();
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<Bean> 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中怎么去查询数据库,以及展示数据呢?需要注意的是(具体的查询语句,操作语句,耗时操作要放在子线程里处理)
[java] view
plain copy
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<City> 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里面做需求操作
[java] view
plain copy
Handler handler = new Handler(){
@Override
public void handleMessage(Message msg) {
super.handleMessage(msg);
switch (msg.what){
case DUI_CUO:
List<DuiCuo> mDuiCuoLists = (List<DuiCuo>) 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<City> mDanxuanLists = (List<City>) msg.obj;
Toast.makeText(NextActivity.this, "共" + mDanxuanLists.size() + "题选择题", Toast.LENGTH_SHORT).show();
XuanZheAdapter adapter = new XuanZheAdapter(NextActivity.this, mDanxuanLists);
mLv.setAdapter(adapter);
break;
}
}
};
相关文章推荐
- Android 如果读取asserts 中的db文件,并进行查询操作
- 如何读取配置文件并连接后台数据库,且对数据库进行操作实例(查询或修改等)
- android数据库操作之直接读取db文件
- [android] 从 SDcard 中进行文件的读取操作,含中文和数字
- android数据库操作之直接读取db文件
- 使用C# 怎么生成.db后缀的文件,并且能够使用sql语言进行读取等 操作
- Android 对 SDCARD 卡 上的sqlite3 db 文件进行操作总结
- 关于C#和ASP.NET中对App.config和Web.config文件里的[appSettings]和[connectionStrings]节点进行新增、修改、删除和读取相关的操作
- Android中使用SDcard进行文件的读取方法
- 基于android中读取assets目录下a.txt文件并进行解析的深入分析
- android(11)_文件操作读取模式
- 关于C#和ASP.NET中对App.config和Web.config文件里的[appSettings]和[connectionStrings]节点进行新增、修改、删除和读取相关的操作
- android 读写xml,修改appserver.xml(根据appserver.xml文件的位置进行操作)
- shell脚本 操作日志文件 && 读取文件 && 查询进程ID
- 用PHP脚本在Linux系统上读取输入和对文件进行操作
- 利用POI对MS Excel进行读写(可以设置写入文件的样式),利用tm-extractor对Word进行读取操作并将信息用(log4j)日志信息显示出
- 在配置文件中获取数据源,然后在hibernate中用sql语句进行查询操作
- 不打开文件操作db时,如果遇到和窗体交互,不会提示文档未锁,但同样需要锁定当前文档,代码如下
- 简单sql查询接口(需要在文件中指定conn才能进行sql语句操作)
- 关于C#和ASP.NET中对App.config和Web.config文件里的[appSettings]和[connectionStrings]节点进行新增、修改、删除和读取相关的操作