3.查询
关系型数据库提供了两种查询数据的方式:
- 直接调用查询接口。使用该接口,会将包含查询条件的谓词自动拼接成完整的SQL语句进行查询操作,无需用户传入原生的SQL语句。
- 执行原生的SQL语句进行查询操作。
(1)谓词使用
关系型数据库提供了用于设置数据库操作条件的谓词AbsRdbPredicates,其中包括两个实现子类RdbPredicates和RawRdbPredicates:
- RdbPredicates:开发者无需编写复杂的SQL语句,仅通过调用该类中条件相关的方法,如equalTo、notEqualTo、groupBy、orderByAsc、beginsWith等,就可自动完成SQL语句拼接,方便用户聚焦业务操作。
- RawRdbPredicates:可满足复杂SQL语句的场景,支持开发者自己设置where条件子句和whereArgs参数。不支持equalTo等条件接口的使用。
类名 | 接口名 | 描述 |
RdbStore | ResultSet query(AbsRdbPredicates predicates, String[] columns) | 查询数据。predicates:谓词,可以设置查询条件。AbsRdbPredicates的实现类有两个:RdbPredicates和RawRdbPredicates。RdbPredicates:支持调用谓词提供的equalTo等接口,设置查询条件。RawRdbPredicates`:仅支持设置表名、where条件子句、whereArgs三个参数,不支持equalTo等接口调用。columns:规定查询返回的列。 |
RdbStore | ResultSet querySql(String sql, String[] sqlArgs) |
RdbPredicates提供了很多的方法。简单点说就是设置获取数据的条件
这里只用了几种 ,感兴趣的可以去多了解
关系型数据库提供了查询返回的结果集ResultSet,其指向查询结果中的一行数据,供用户对查询结果进行遍历和访问。ResultSet对外API大家可以去官网了解
//谓词方式查询 RdbPredicates rdbPredicates = new RdbPredicates("test") //获取年龄为28的数据 .equalTo("age", 28) .orderByDesc("salary"); //columns:规定查询返回的列。 String[] columns = new String[]{"id","name","age","salary"}; ResultSet resultSet = rdbStore.query(rdbPredicates, columns); for (int i=0;i<resultSet.getRowCount();i++){ resultSet.goToRow(i); System.out.println("+++++++++id"+resultSet.getInt(resultSet.getColumnIndexForName("id"))); System.out.println("+++++++++name"+resultSet.getString(resultSet.getColumnIndexForName("name"))); System.out.println("+++++++++age"+resultSet.getInt(resultSet.getColumnIndexForName("age"))); System.out.println("+++++++++salary"+resultSet.getDouble(resultSet.getColumnIndexForName("salary"))); }
查询结果,因为我年龄设置的28,所以只有这一个人的数据,如果年龄一样的话就会 根据工资的大小类排列顺序
(2)原生sql
原生sql语句我们只需要改写几行代码就行了
//原生sql ResultSet resultSet = rdbStore. querySql("select id,name,age,salary from test where age=? order by salary desc", new String[]{"28"}); for (int i=0;i<resultSet.getRowCount();i++){ resultSet.goToRow(i); System.out.println("+++++++++id"+resultSet.getInt(resultSet.getColumnIndexForName("id"))); System.out.println("+++++++++name"+resultSet.getString(resultSet.getColumnIndexForName("name"))); System.out.println("+++++++++age"+resultSet.getInt(resultSet.getColumnIndexForName("age"))); System.out.println("+++++++++salary"+resultSet.getDouble(resultSet.getColumnIndexForName("salary"))); }
在这里我把第一个年龄也改为了28,然后他就根据工资排序了,可以看到是降序排列