想把本地的手机上的音乐,扫描出来,放入SQLite数据库中,下次打开App以后,就不用再去搜索了。现在是数据库的存储多条数据,我用了insert但是,有多条数据,且是想存储为一个实体类的对象的形式,不知道怎么弄呀?。。
下面是这个从SK卡里面查询出来了手机上的本地音乐,用的是实体列表的
//数据源
private static List<TuyuEntityImpl> mTuyuEntityImpl = new ArrayList<>();
@Override
public void scanTuyuStop() {
mProgressDialog.dismiss();//结束扫描就关闭Dialog
mTuyuEntityImpl.addAll(TuyuManager.getInstance().getClientImpl().getTuyuList());
for(int i=0;i<mTuyuEntityImpl.size();++i){
// mTuyuEntityImpl.get(i).save();//LitePal 数据库的 写法
DBTuyuHelper dbTuyuHelper = null;
SQLiteDatabase db;
ContentValues values;
String tableName = "tuyu";
db = dbTuyuHelper.getWritableDatabase();
// values.put("tuyuName");
db.insert(tableName,null,mTuyuEntityImpl);
db.close();
}
就是在db.insert 这里会出问题。
它说需要一个 ContentValues,我这里是一个多条数据的 对象性的东西,怎么给它存进去呀?
在网上找了些资料,我接收到的是一些数组List的,我不太清楚怎样将其中泛型的类的值,给下面的添加数据的addTuyu()方法里面,一个是List的,虽然泛型是tuyuEntityImpl ,下面要调出实体类的字段
List<TuyuEntityimpl> tuyuEntityImpl
所以下面类型不对,得不到,该怎么做?
ContentValues values = new ContentValues();
values.put(“属性名称1”, 属性值1);
values.put(“属性名称2”, 属性值2);
db.insert(“表名”, null, values);
上面这个是每次插入一次数据的,你的List遍历一下,一个对象插入一次咯
记得创建表的时候也要有这些字段
一般不建议这么做,数据库都是存储一个索引,然后进行快速查找,如果真的想存储需要转化成2进制进行储存,数据库一般是存不了对象的,但可以把对象分解成各个字段进行储存
网上随便找找Android Sqlite读写的示例代码,参考一下就能解决了
你可以用些框架,没必要用原生的。room、greendao或者LitePal
是想要存一个对象到SQLite吗?那至少你需要有一个唯一标识,然后存储json数据。你是不会存还是不会取?我这边写了个例子,你可以参考看
运行示例:
sqlite 是关系型数据库,看你的想法应该使用no-sql类型的数据库,或者不用数据库直接把数据以json对象的格式存起来,这样再次拿到就是一个对象。