Android读取外部存储设备(自带SD卡及外部接入存储设备 )中的数据库文件

 我们在开发工作中,时时刻刻在与数据打交道,保存数据的方式很多,其中使用数据库来保存及操作数据是最常见的一种方式。
 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();
    }
}
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值