ROOM数据库的⽤法。sql语句的写法。
⼀、添加依赖。
.room数据库的使⽤,在app的adle中添加依赖:
//room数据库
def room_version = "2.2.6"
implementation ":room-runtime:$room_version"
annotationProcessor ":room-compiler:$room_version"
// optional - RxJava support for Room
implementation ":room-rxjava2:$room_version"
// optional - Guava support for Room, including Optional and ListenableFuture
implementation ":room-guava:$room_version"
/
/ optional - Test helpers
testImplementation ":room-testing:$room_version"
⼆、建表。
实体类,实体类的字段对应着 表的字段。 可以在实体类⾥⾯设置表名。设置主键。设置忽略的字段(忽略的字段则不作为表中的字段。)
下⾯代码中
(1)tableName后⾯跟的是表名。(2) primaryKeys后⾯跟的是主键。如果多个字段组成主键。就设置多个字段。中间⽤逗号分割。ps:如果只有⼀个字段作为主键,可以在字段上⾯加@primaryKeys注解
(3)主键字段要加@NonNull注解 (4)字段加了@Ignore注解的 ,表⽰忽略的字段。建表⽆此字段。(可以作为数据解析的时候⽤)
@Entity(tableName = "KeCheng",primaryKeys = {"xuehao","kechenghao"}) public class KeCheng implements Serializable {
@NonNull
private String xuehao;
@NonNull
private String kechenghao;
private String name;
@Ignore
private String age;
public String getXuehao() {
return xuehao;
}
public void setXuehao(String xuehao) {
this.xuehao = xuehao;
}
public String getKechenghao() {
return kechenghao;
}
public void setKechenghao(String kechenghao) {
this.kechenghao = kechenghao;
}
public String getName() {
jfinal增删改查return name;
}
public void setName(String name) {
this.name = name;
}
public String getAge() {
return age;
}
public void setAge(String age) {
this.age = age;
}
}
三、创建接⼝Dao,进⾏数据库表的增删改查操作。
* 定义接⼝操作数据库,进⾏增删改查操作
*/
@Dao
public interface KeChengDao {
/**查询所有的数据
* @return
*/
@Query("SELECT * FROM KeCheng")
LiveData<List<KeCheng>> getAllLive();//查询所有的
/**根据xuehao查询对应的数据
* @return
*/
@Query("SELECT * FROM KeCheng WHERE xuehao like :xuehao")
LiveData<List<KeCheng>> getAllLiveByXueHao(String xuehao);//查询所有的
//插⼊数据
@Insert(onConflict = OnConflictStrategy.REPLACE)
void KeChengs); //...表⽰可以传递多个同类型参数
}
补充⼀下多条件查询。如果传⼊参数则按照条件查询。传“”则查询全部。sql语句改如何写。
kprq like '%' || :kprq || '%' or :kprq='' 这是重点。就是如果传⼊值则查询 对应条件的数据。如果传⼊‘’查询全部数据。 %是模糊查
询。拼接sql语句⽤||,传⼊的参数前⾯加冒号:,表⽰引⽤参数的值 (:kprq)
@Query("SELECT fpqqlsh FROM AcmeTaxDetails WHERE isFromBenDi='1' and (ddsj LIKE '%' || :applytime || '%' or :applytime='' or kprq like '%' || :kpr LiveData<List<String>> findBenDiData( String applytime, String kprq);
四、创建数据库database
* 创建数据库,得到数据库对象。得到数据库底层操作的Dao层。进⾏增删改查操作。
*/
//配置你要操作的entry类,可以配置⼀个或者多个,version表名这个是哪个版本,如果升级需要修改
@Database(entities = { KeCheng.class, Student.class}, version = 1, exportSchema = true)//exportSchema 默认为true,存储展⽰数据库的结构信息public abstract class RoomStudentDatabase extends RoomDatabase {
public static final String DATABASE_NAME = "school";
//singleton
private static RoomStudentDatabase sInstance; //单例模式,保证获取的数据库实例是唯⼀的
public static RoomStudentDatabase getInstance(Context context) {
if (sInstance == null) {
synchronized (RoomStudentDatabase .class) {
if (sInstance == null) {
sInstance = buildDatabase(context);
}
}
}
return sInstance;
}
//下⾯注释表⽰允许主线程进⾏数据库操作,但是不推荐这样做。
/
/他可能造成主线程lock以及anr
//所以我们的操作都是在新线程完成的
// .allowMainThreadQueries()
private static RoomStudentDatabase buildDatabase(final Context appContext) {
return Room.ApplicationContext(), RoomStudentDatabase .class, DATABASE_NAME)
// .allowMainThreadQueries()
// .openHelperFactory(new SafeHelperFactory("123456".toCharArray()))
.addCallback(new Callback() {
@Override
public void onCreate(@NonNull SupportSQLiteDatabase db) {
}
@Override
public void onOpen(@NonNull SupportSQLiteDatabase db) {
}
})
.build();
}
//KeChengDao 提供直接访问底层数据库实现,我们通过定义抽象⽅法返回具体Dao
//然后进⾏数据库增删该查的实现。
public abstract KeChengDao getKeChengDao();
}
五、创建ViewModel来连接view, 这⾥的Dao和Entity是是以其它名字为例。所以可能和上⾯的名称对不上.
对数据库的操作。
public class KeChengViewModel extends AndroidViewModel {
private KeChengDao mKeChengDao;
public KeChengViewModel (@NonNull Application application) {
super(application);
RoomKeChengDatabase Instance(application);
KeChengDao();
}
/**
* 添加多条数据操作
* @param KeCheng 数组类型,多条数据
*/
public void insertKeCheng(Context context, keChengs){
new InsertAsyncTask(context,mKeChengDao).execute(keChengs);
}
/**
* 异步进⾏插⼊数据操作。在⼦线程进⾏操作
*/
static class InsertAsyncTask extends AsyncTask<KeCheng, Void, Void> {
KeChengDao kechengDao;
Context mContext;
public InsertAsyncTask(Context context,KeChengDao kechengDao) {
this.kechengDao= kechengDao;
this.mContext=context;
}
@Override
protected Void kechengDaos) {
taxDao.insertTax(kechengDaos);
return null;
}
@Override
protected void onPostExecute(Void aVoid) {
}
}
}
六、activity如何操作数据库。⾸先得到viewModel对象。然后⽤viewModel对象⾥⾯的⽅法来操作数据库。对数据库的操作在异步进⾏。 KeChengViewModel mKeChengViewModel;
在onCreate⽅法⾥⾯得到viewModel的对象
mKeChengViewModel= ViewModelProviders.of(this).get(KeChengViewModel.class);
在对应的逻辑出调⽤⽅法,调⽤viewModel的插⼊⽅法。此⽅法⾥⾯异步进⾏插⼊数据库操作。
mKeChengViewModel.insertKeCheng(MainActivity.this,kechengs);
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论