LitePal框架是郭神的开源框架,郭神博客
惯例,膜拜一下郭神。
下面正式开播,上一篇(总结八)写的太累,但是也把简单查询给总结完了,本篇接着总结八继续写。
介绍完简单查询,我们介绍连缀查询。
郭神的连缀查询,我理解的就是根据条件查询。
举例:
查询News表中,查询id>5的数据
/** * 查询id>5的记录 */ private void selectTest1() { List<News> newsList=DataSupport.where("id>?", "5").find(News.class); for (News newslist : newsList) { Log.i(TAG,"Title: " + newslist.getTitle() + "Content: "+ newslist.getContent()); } }
然后在onCreate()方法里调用一下
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SQLiteDatabase db = Connector.getDatabase(); // addMyFirstNews(); // addNewsAndIntroduce(); // addNewsAndComments(); // addNewsAndCategories(); // updateNewsInfo(); // updateAllUseConditions(); // updateAllUseConditions2(); // deteleNews(); // deteleNews2(); // deleteAllUseConditions(); // deleteAllUseConditions2(); // findDataById(); // findFirstData(); // findLastData(); // findAllData(); // findAllBySomeId(); selectTest1(); }
来看一下log打印出来的结果
来看看数据库的News表的数据
经过对比,我们发现我们的查询结果是正确的。
那我们想要查询News表中id>5的数据的Content和title两列怎么弄呢?
来人,上代码
/** * 查询News表中id>5的数据的Content和title两列 */ private void selectTest2() { List<News> newsList = DataSupport.select("content","title").where("id>?", "5").find(News.class); for (News newslist : newsList) { Log.i(TAG,"Title: " + newslist.getTitle() + "Content: "+ newslist.getContent()); } }
然后在onCreate()方法里调用
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SQLiteDatabase db = Connector.getDatabase(); // addMyFirstNews(); // addNewsAndIntroduce(); // addNewsAndComments(); // addNewsAndCategories(); // updateNewsInfo(); // updateAllUseConditions(); // updateAllUseConditions2(); // deteleNews(); // deteleNews2(); // deleteAllUseConditions(); // deleteAllUseConditions2(); // findDataById(); // findFirstData(); // findLastData(); // findAllData(); // findAllBySomeId(); // selectTest1(); selectTest2();
来看一下Log打印出来的结果
对于News数据表中的数据
这里和上一个连缀查询的区别是,我们的返回的News对象只包含我们查询的2列。
以此类推,我们还可以对查询的结果进行排序。
来人,上代码呀
/** * 查询News表中id>5的数据的Content和title两列,并根据id降序排列。 */ private void selectTest3() { List<News> newsList = DataSupport.select("content", "title") .where("id>?", "5").order("id desc").find(News.class); for (News newslist : newsList) { Log.i(TAG, "Title: " + newslist.getTitle() + "Content: " + newslist.getContent()); } }
然后在onCreate()方法里调用
@Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); SQLiteDatabase db = Connector.getDatabase(); // addMyFirstNews(); // addNewsAndIntroduce(); // addNewsAndComments(); // addNewsAndCategories(); // updateNewsInfo(); // updateAllUseConditions(); // updateAllUseConditions2(); // deteleNews(); // deteleNews2(); // deleteAllUseConditions(); // deleteAllUseConditions2(); // findDataById(); // findFirstData(); // findLastData(); // findAllData(); // findAllBySomeId(); // selectTest1(); // selectTest2(); selectTest3();
来看Log打印出来的结果。
我们发现,先打印的是id=7的数据,然后是id=6的数据。
还可以进行分页
上代码
/** * 查询News表中所有数据,并根据id降序排列,并且进行分页,每页显示3个。 */ private void selectTest4() { List<News> newsList = DataSupport.order("id desc").limit(3).find(News.class); for (News newslist : newsList) { Log.i(TAG,"Title: " + newslist.getTitle() + "Content: "+ newslist.getContent()); } }
来看看Log打印出来的结果。
我们发现是根据id的逆序打印出来的。
那么我想利用分页查询,点击下一页的时候,下一页也显示3个数据怎么弄呢?
上代码
/** * 查询News表中所有数据,并根据id降序排列,并且进行分页,每页显示3个,点击下一页,也显示3个。 */ private void selectTest5() { List<News> newsList = DataSupport.order("id desc").limit(3).offset(3).find(News.class); for (News newslist : newsList) { Log.i(TAG,"Title: " + newslist.getTitle() + "Content: "+ newslist.getContent()); } }
来看Log打印出来的结果
这里显示1条的原因是,我们一共只有4条数据,上一次显示了3条。
o(︶︿︶)o 唉,终于介绍完连缀查询了,擦。想用啥直接组合上去就好了,就是这么任性。