Android Room 数据库
16lz
2021-01-23
删除表 "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;
更多相关文章
- android 数据保存与提取
- android数据库操作
- 关于Android WebView上传文件的解决方案
- sqlit导入外部数据库查找数据方法
- Android 和 PHP 之间进行数据加密传输
- Android开发错误信息与解决方案汇总
- Android使用SQLite数据库(1)
- android开发出现No Launcher activity found!解决方案