RxAndroid之操作数据库SqlBrite(RXAndroid实现数据库的增、删、改、查)
来源:互联网 发布:asp.net 明细数据输入 编辑:程序博客网 时间:2024/06/06 14:16
一、查询
1.创建SqlBrite
SqlBrite sqlBrite = SqlBrite.create();2.将SQLiteOpenHelper的一个实例和一个Scheduler作为参数创建BriteDatabase,正确地传入Scheduler可以防止线程被阻塞
BriteDatabase db = sqlBrite.wrapDatabaseHelper(openHelper, Schedulers.io());3.通过BriteDatabase.createQuery方法来进行查询,它需要两个参数,一个是所要查询的表,一个是sql语句,这个方法与SQLiteDatabase.rawQuery类似Observable<Query> users = db.createQuery("users", "SELECT * FROM users");
4.通过返回的Observable来进行订阅,并通过query.run()方法获取数据
users.subscribe(new Action1<Query>() { @Override public void call(Query query) { Cursor cursor = query.run(); // TODO parse data... }});
二、增加、删除、更新表后所有订阅的数据都会马上进行更新
所有的增、删、改、查操作都必须通过对象BriteDatabase来正确地通知订阅者
final AtomicInteger queries = new AtomicInteger();users.subscribe(new Action1<Query>() { @Override public void call(Query query) { queries.getAndIncrement(); }});System.out.println("Queries: " + queries.get()); // Prints 1db.insert("users", createUser("jw", "Jake Wharton"));db.insert("users", createUser("mattp", "Matt Precious"));db.insert("users", createUser("strong", "Alec Strong"));System.out.println("Queries: " + queries.get()); // Prints 4
三、Unsubscribe from the returned
Subscription
to stop getting updates.Unsubscribe from the returned Subscription
to stop getting updates.
final AtomicInteger queries = new AtomicInteger();Subscription s = users.subscribe(new Action1<Query>() { @Override public void call(Query query) { queries.getAndIncrement(); }});System.out.println("Queries: " + queries.get()); // Prints 1db.insert("users", createUser("jw", "Jake Wharton"));db.insert("users", createUser("mattp", "Matt Precious"));s.unsubscribe();db.insert("users", createUser("strong", "Alec Strong"));System.out.println("Queries: " + queries.get()); // Prints 3
四、数据改变较大时使用transactions
final AtomicInteger queries = new AtomicInteger();users.subscribe(new Action1<Query>() { @Override public void call(Query query) { queries.getAndIncrement(); }});System.out.println("Queries: " + queries.get()); // Prints 1Transaction transaction = db.newTransaction();try { db.insert("users", createUser("jw", "Jake Wharton")); db.insert("users", createUser("mattp", "Matt Precious")); db.insert("users", createUser("strong", "Alec Strong")); transaction.markSuccessful();} finally { transaction.end();}System.out.println("Queries: " + queries.get()); // Prints 2
五、使用操作符
queries只是普通的RxJava 的Observable对象,所有的操作符都可以用来控制所要发给订阅者的数据
users.debounce(500, MILLISECONDS).subscribe(new Action1<Query>() { @Override public void call(Query query) { // TODO... }});
六、监测从其它app查询的数据
BriteContentResolver resolver = sqlBrite.wrapContentProvider(contentResolver, Schedulers.io());Observable<Query> query = resolver.createQuery(/*...*/);
创建数据库和表的类:
public class RxDatabaseHelper extends SQLiteOpenHelper{ private String TAG = "RX"; private Context context; private static RxDatabaseHelper rxDatabaseHelper = null; private RxDatabaseHelper(Context context) { super(context, "rxdb.sqlite", null, 1); //创建数据库rxdb.sqlite this.context = context; } public static RxDatabaseHelper getInstance(Context context){ if(rxDatabaseHelper == null){ synchronized (RxDatabaseHelper.class){ if(rxDatabaseHelper == null){ rxDatabaseHelper = new RxDatabaseHelper(context); } } } return rxDatabaseHelper; } @Override public void onCreate(SQLiteDatabase db) { //创建表rx_db_test,表中的字段:_id,name,gender,age db.execSQL("create table if not exists rx_db_test (_id integer primary key,name text, gender text, age long)"); } @Override public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) { }
测试增删改查的类:
public class RxDatabaseActivity extends Activity{ private String TAG = "RX"; private RxDatabaseHelper rxDatabaseHelper; private SQLiteOpenHelper sqLiteOpenHelper; private SQLiteDatabase sqLiteDatabase; private BriteDatabase briteDatabase; private SqlBrite sqlBrite; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.rx_widget_layout); sqLiteOpenHelper = RxDatabaseHelper.getInstance(getApplicationContext()); sqLiteDatabase = sqLiteOpenHelper.getWritableDatabase(); sqlBrite = SqlBrite.create(); briteDatabase = sqlBrite.wrapDatabaseHelper(sqLiteOpenHelper,Schedulers.io());// testInser(); //增// testDelete(); //删// testUpdate(); //改 testQuery(); //查 } //查询数据 private void testQuery() { Observable<SqlBrite.Query> rxDbTest = briteDatabase.createQuery("rx_db_test", "SELECT * FROM rx_db_test"); rxDbTest.subscribe(new Action1<SqlBrite.Query>() { @Override public void call(SqlBrite.Query query) { Cursor cursor = query.run(); while (cursor.moveToNext()){ Log.e(TAG,"["+cursor.getString(cursor.getColumnIndex("name"))+","+cursor.getString(cursor.getColumnIndex("gender"))+"," +cursor.getLong(cursor.getColumnIndex("age"))+"]"); } } }); } //修改数据 private void testUpdate() { ContentValues contentValues = new ContentValues(); contentValues.put("age",10); //将姓名为zhangsan19的人的年龄改为10 briteDatabase.update("rx_db_test",contentValues,"name=?","zhangsan19"); } //删除数据 private void testDelete() { //删除age=10的那条数据 //第一个参数是表名,第二个参数是所要匹配的字段的名字,第三个参数是所要匹配的字段值 briteDatabase.delete("rx_db_test","age=?","10"); } //添加数据 private void testInser() { ContentValues contentValues = new ContentValues(); //第一个参数是表名,第二个参数是所要添加的数据的键值对// db.execSQL("create table if not exists rx_db_test (_id integer primary key,name text, gender text, age long)"); for(int i=1;i<20;i++){ contentValues.put("name","zhangsan"+i); if(i%2 == 0) { contentValues.put("gender", "女"); }else{ contentValues.put("gender", "男"); } contentValues.put("age", i); briteDatabase.insert("rx_db_test", contentValues); } }}
增加数据运行结果:
删除数据运行结果(将age=10的那条数据删除了):
修改数据后运行的结果(将姓名为zhangsan19的人的年龄改为10):
查询运行的结果:
注:1.需要在build.gradle中添加compile 'com.squareup.sqlbrite:sqlbrite:0.7.0'
2.参考资料:https://github.com/ReactiveX/RxAndroid/wiki#removed
https://github.com/square/sqlbrite
0 0
- RxAndroid之操作数据库SqlBrite(RXAndroid实现数据库的增、删、改、查)
- RxAndroid之操作数据库SqlBrite(RXAndroid实现数据库的增、删、改、查)
- 使用NHibernate对数据库实现增、删、改、查操作
- JSP实现数据库的增、删、改、查、分页查
- Android中API建议的方式实现SQLite数据库的增、删、改、查的操作
- Android SQLite 数据库、表的增、删、改、查操作
- 简单的数据库操作 增 删 改 查
- 简单的数据库操作 增 删 改 查
- 数据库的增、删、改、查操作-----(一)
- Android实现SQLite数据库的增、删、改、查的操作
- Java程序操作Oracle数据库实现增,删,改,查的封装类*
- Java连接数据库,实现“增、删、改、查”的基本操作
- Hibernate实现数据库增、删、改、查
- 数据库的创建,数据库的操作(增删改查)
- iOS经典讲解之利用单例类封装对SQLite数据库增、删、查、改的操作
- 使用ASP操作数据库(增、删、改、查)
- python操作mysql数据库(增,删,改,查)
- python操作MySQL数据库(增 删 改 查)续篇
- 获得指定安装包的VersionName
- IOS 下拉方法 上推缩小
- libswscale图像格式转换与放大缩小
- Linux下Tomcat的安装配置
- NSDictionary NSMutableDictionary
- RxAndroid之操作数据库SqlBrite(RXAndroid实现数据库的增、删、改、查)
- ubuntu14 ubuntu15 源码安装infer
- 大数据_Kafka_Kafka的重要配置总结
- 线段树模版
- Qt模仿Android、IOS滑动窗口效果
- UVA-1585
- 用代理抓数据的坑
- [Android]Android超高仿微信图片选择器
- python清除字符串中间空格的方法