版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/true100/article/details/79499337
我们在开发工作中,时时刻刻在与数据打交道,保存数据的方式很多,其中使用数据库来保存及操作数据是最常见的一种方式。
Android内嵌了SQLite数据库,这是一种非常流行的嵌入式及轻型关系型数据库。支持SQL,支持多种操作系统,完全独立运行,没有依赖性。
我们在开发中创建的数据库文件默认路径是:/data/data/项目包名/数据库名。但是有时候,我们需要操作并不在此路径下的数据库文件。
比如我们有时候会把数据库文件放到res/raw目录下,同项目一起打包发布。在res/raw目录下的文件即不在默认的路径下。
通常我们是要先把assert下文件复制到指定文件路径 ,再操作数据库,这样即可。
现在要记录的和上面的都不太一样,我们就把数据库直接放置到SD卡(或其它存储设备)中指定目录,然后直接对该数据库进行读取操作。
通常我们操作数据库是自己写个类extends SQLiteOpenHelper ,然后调用对应的方法操作数据库:
public class TestDBHelper extends SQLiteOpenHelper {
private static final int VERSION = 1;
/**
* 在SQLiteOpenHelper的子类当中,必须有该构造函数
*/
public DatabaseHelper(Context context, String name, CursorFactory factory, int version) {
super(context, name, factory, version);
}
/**
* 第一次创建时执行,通常在这里创建表格
*/
@Override
public void onCreate(SQLiteDatabase db) {
// CREATE TABLE.....
}
/**
* 数据库升级时执行,升级需要改上面对应版本号
*/
@Override
public void onUpgrade(SQLiteDatabase arg0, int arg1, int arg2) {
}
}
但是在读写外置数据库时,使用到的是SQLiteDatabase.openOrCreateDatabase(file, factory)方法,第一个参数指的就是数据库文件,第二个参数通常传入null即可。直接上个简单的代码:
public class CustomSQLTools {
//数据库存储路径
private String filePath;
private SQLiteDatabase database;
public SQLiteDatabase openDatabase(Context context) {
File jhPath = new File(filePath);
//查看数据库文件是否存在
if (jhPath.exists()) {
//存在则直接返回打开的数据库
return SQLiteDatabase.openOrCreateDatabase(jhPath, null);
} else {
Toast.makeText(context, "数据库文件不存在", Toast.LENGTH_SHORT).show();
return null;
}
}
}
在Activity中使用:
public class TestDbActivity extends BaseAct {
private TextView test_db;
@Override
public void setRootView() {
setContentView(R.layout.activity_test);
test_db = (TextView) findViewById(R.id.test_db);
test_db.setOnClickListener(this);
}
@Override
public void widgetClick(View v) {
if (v.getId() == R.id.test_db) {
//点击直接根据条件查询数据库数据
initSqlAndQuery("1000001739", date);
});
}
}
private void initSqlAndQuery(String queryId, String queryDate) {
List<TestDataBean> queryResultList = new ArrayList<>();
CustomSQLTools s = new CustomSQLTools();
SQLiteDatabase database = s.openDatabase(getApplicationContext());
String sql = "select * from VITAL_DATA_BEAN where deviceId = ? and date like?";
Cursor cursor = database.rawQuery(sql, new String[]{queryId, queryDate + "%"});
while (cursor.moveToNext()) {
TestDataBeanbean = new TestDataBean();
int deviceId = cursor.getInt(cursor.getColumnIndex("deviceId"));
String date = cursor.getString(cursor.getColumnIndex("date"));
String rpm = cursor.getString(cursor.getColumnIndex("rpm"));
String movementFast = cursor.getString(cursor.getColumnIndex("movementFast"));
//设置对应实体数据,从而获取到我们需要的数据
bean.setDeviceId(deviceId);
bean.setDate(date);
bean.setRpm(rpm);
bean.setMovementFast(movementFast);
queryResultList.add(bean);
}
cursor.close();
database.close();
}
}