删除表 "drop table if exists " + TABLE_NAME
删除数据不删表 "DELETE FROM " + TABLE_NAME

解决Schema export Error:
Schema export directory is not provided to the annotation processor so we cannot export the schema.
You can either provide room.schemaLocation annotation processor argument OR set exportSchema to false.

解决方式一:
给RoomDatabase设置exportSchema注解为false。

@Database(entities = { YourEntity.class }, version = xxx, **exportSchema = false**)public abstract class AppDatabase extends RoomDatabase {}

解决方案二:
在项目中gradle中通过 annotationProcessorOptions 注解,为room.schemaLocation指定schemas的子文件夹。

android {    defaultConfig {        //指定room.schemaLocation生成的文件路径        javaCompileOptions {            annotationProcessorOptions {                arguments = ["room.schemaLocation": "$projectDir/schemas".toString()]            }        }    }}

使用步骤:
1、创建实体类,注解规则

@Entity//数据表名称public class User {    @PrimaryKey(autoGenerate = true)//主键,自增    private long uid;    private String name;    private String address;    private String phone;    private Integer age;    public User(String name, String address, String phone) {        this.name = name;        this.address = address;        this.phone = phone;    }  ...      @Override    public String toString() {        return "User{" +                "uid=" + uid +                ", name='" + name + '\'' +                ", address='" + address + '\'' +                ", phone='" + phone + '\'' +                ", age=" + age +                '}';    }}

2、创建Dao接口

@Daopublic interface UserDao {    @Insert(onConflict = OnConflictStrategy.REPLACE)  //指明冲突解决方案    List insert(User... user);    @Query("Select * from user")    Flowable> loadUser();    @Query("delete from user where user.name=:uid")  //根据条件删除    void delete(String uid);    @Update(onConflict = OnConflictStrategy.REPLACE)    void update(User user);    @Query("delete from user")   //删除全部信息    void deletAll();}

3、自定义database,继承roomdatabase

@Database(entities = {User.class,Book.class},version = 3,exportSchema = false)@TypeConverters({Converters.class})public abstract class AppDatabase extends RoomDatabase {    public abstract UserDao userDao();    public abstract BookDao bookDao();}

4、Applacation初始化数据库

public class AppApplication extends AppContext {    private AppDatabase mAppDatabase;    @Override    public void onCreate() {        super.onCreate();        mAppDatabase = Room.databaseBuilder(getApplicationContext(), AppDatabase.class, "android_room_test.db")                .allowMainThreadQueries()                .addMigrations(MIGRATION_1_2, MIGRATION_2_3)                .build();    }    public AppDatabase getmAppDatabase() {        return mAppDatabase;    }    static final Migration MIGRATION_2_3 = new Migration(2, 3) {        @Override        public void migrate(@NonNull SupportSQLiteDatabase database) {            database.execSQL("create table if not exists 'book'('uid'integer primary key autoincrement,'name' text,'userid' integer,'time' integer)");        }    };    static final Migration MIGRATION_1_2 = new Migration(1, 2) {        @Override        public void migrate(@NonNull SupportSQLiteDatabase database) {            database.execSQL("alter table User add column age integer");        }    };}

5、使用

 case R.id.buttonadd:                int index= (int)(Math.random()*10);                User user=new User("frank"+index,"address"+index,"176xxxxxxxx"+index);                mAppDatabase.userDao().insert(user);                showResult.setText("插入数据:"+user.toString());                break;            case R.id.buttondel:                int index1= (int)(Math.random()*10);                long index2= (long)(Math.random()*100);                User user1=new User("frank"+index1,"address"+index1,"176xxxxxxxx"+index1);                mAppDatabase.userDao().delete(user1.getName());                showResult.setText("删除数据name:"+user1.getName());                break;            case R.id.buttonquery:                mAppDatabase.userDao().loadUser().subscribeOn(Schedulers.io())                        .observeOn(AndroidSchedulers.mainThread())                        .subscribe(new Consumer>() {                            @Override                            public void accept(List users) throws Exception {                                if (users!=null){                                    container.removeAllViews();                                    for (User user:users){                                        TextView v=new TextView(TestRoomActivity.this);                                        v.setText("查询数据:"+user.toString());                                        container.addView(v);                                    }                                }                            }                        });                break;            case R.id.buttonupdate:                mAppDatabase.userDao().deletAll();                break;

更多相关文章

  1. android 数据保存与提取
  2. android数据库操作
  3. 关于Android WebView上传文件的解决方案
  4. sqlit导入外部数据库查找数据方法
  5. Android 和 PHP 之间进行数据加密传输
  6. Android开发错误信息与解决方案汇总
  7. Android使用SQLite数据库(1)
  8. android开发出现No Launcher activity found!解决方案

随机推荐

  1. 日期对话框DatePickerDialog
  2. android录制音频的时,报错setAudioSource
  3. Android(安卓)编译出错版本匹配问题解决
  4. Android(安卓)Parcelable对象生成:Parcela
  5. android开发笔记之Button的圆角和按下效
  6. android studio不能运行
  7. android 通话记录插入 短信插入 联系人插
  8. LeakCanary笔记
  9. 解决ADB server didn't ACK * failed to
  10. android中做图片的平铺