LitePal专业数据库框架使用

  1. package com.example.litepaldemo;  
  2.   
  3. import java.util.ArrayList;  
  4. import java.util.Date;  
  5. import java.util.List;  
  6.   
  7. import org.litepal.crud.DataSupport;  
  8. import org.litepal.tablemanager.Connector;  
  9. import com.example.litepaldemo.bean.Category;  
  10. import com.example.litepaldemo.bean.Comment;  
  11. import com.example.litepaldemo.bean.Introduction;  
  12. import com.example.litepaldemo.bean.News;  
  13. import android.os.Bundle;  
  14. import android.app.Activity;  
  15. import android.content.ContentValues;  
  16. import android.database.sqlite.SQLiteDatabase;  
  17. import android.view.Menu;  
  18. import android.view.View;  
  19. import android.view.View.OnClickListener;  
  20. import android.widget.Button;  
  21. import android.widget.Toast;  
  22. //LitePal数据库框架使用Demo  
  23. public class MainActivity extends Activity implements OnClickListener{  
  24. private Button btnAdd,btnDelete,btnChange,btnCheck;  
  25.         @Override  
  26.         protected void onCreate(Bundle savedInstanceState) {  
  27.                 super.onCreate(savedInstanceState);  
  28.                 setContentView(R.layout.activity_main);  
  29.                 initView();  
  30.                 btnAdd.setOnClickListener(this);  
  31.                 btnDelete.setOnClickListener(this);  
  32.                 btnChange.setOnClickListener(this);  
  33.                 btnCheck.setOnClickListener(this);  
  34.                 SQLiteDatabase db=Connector.getDatabase();  
  35.         }  
  36.         private void initView() {  
  37.                 // TODO Auto-generated method stub  
  38.                 btnAdd=(Button) findViewById(R.id.btnAdd);  
  39.                 btnDelete=(Button) findViewById(R.id.btnDelete);  
  40.                 btnChange=(Button) findViewById(R.id.btnChange);  
  41.                 btnCheck=(Button) findViewById(R.id.btnCheck);  
  42.         }  
  43.         @Override  
  44.         public void onClick(View v) {  
  45.                 // TODO Auto-generated method stub  
  46.                 switch (v.getId()) {  
  47.                 case R.id.btnAdd://增加  
  48.                         //一:普通存储  
  49.                         for (int i = 0; i < 10; i++) {  
  50.                                 News news = new News();  
  51.                                 news.setTitle("第"+i+"条新闻");  
  52.                                 news.setContent("内容"+i);  
  53.                                 news.setPublishDate(new Date());  
  54.                                 boolean ifSaveSuccess=news.save();  
  55.                                 if(ifSaveSuccess)  
  56.                                 {  
  57.                                         Toast.makeText(MainActivity.this"存储成功!"0).show();  
  58.                                 }  
  59.                         }  
  60.                           
  61.                         //二:存储整个集合  
  62.                         List<News> newsList=new ArrayList<News>();  
  63.                         for (int i = 0; i < 10; i++) {  
  64.                                 News news = new News();  
  65.                                 news.setTitle("第"+i+"条新闻");  
  66.                                 news.setContent("内容"+i);  
  67.                                 news.setPublishDate(new Date());  
  68.                                 newsList.add(news);  
  69.                         }  
  70.                         DataSupport.saveAll(newsList);  
  71.                           
  72.                         //三:具有表关联的存储  
  73.                         Comment comment1=new Comment();  
  74.                         comment1.setContent("评论1");  
  75.                         comment1.setPublishdate(new Date());  
  76.                         comment1.save();  
  77.                           
  78.                         Comment comment2=new Comment();  
  79.                         comment2.setContent("评论2");  
  80.                         comment2.setPublishdate(new Date());  
  81.                         comment2.save();  
  82.                           
  83.                         News news=new News();  
  84.                         news.getCommentList().add(comment1);  
  85.                         news.getCommentList().add(comment2);  
  86.                         news.setTitle("头条新闻");  
  87.                         news.setContent("马云批评京东...");  
  88.                         news.setPublishDate(new Date());  
  89.                         news.setCommentCount(news.getCommentList().size());  
  90.                         news.save();  
  91.                           
  92.                         //如果想要在存储失败的情况下抛出异常,就用saveThrows()来存储数据  
  93.                         /*News news0 = new News(); 
  94.                         news.setTitle("这是一条新闻标题"); 
  95.                         news.setContent("这是一条新闻内容"); 
  96.                         news.setPublishDate(new Date()); 
  97.                         try { 
  98.                                 news.saveThrows(); 
  99.                         } catch (Exception e) { 
  100.                                 // TODO Auto-generated catch block 
  101.                                 e.printStackTrace(); 
  102.                         }*/  
  103.                           
  104.                         break;  
  105.                 case R.id.btnDelete://删除  
  106.                         //1.删除单条数据(根据表名和id来删除) 这个方法会返回删除的数据条数  
  107.                         //注意:如果删除的数据所在的表与其他的表建立了关联,那么会删除与之关联的表中关联此条数据的数据  
  108.                         //例如:id=1 的新闻被删除了 而这条新闻对应的是 id=1,2,3的评论,那么这些评论也会被删除  
  109.                         //DataSupport.delete(News.class, 2);  
  110.                           
  111.                         //2.根据条件删除数据  
  112.                         //DataSupport.deleteAll(News.class, "title=? and commentcount=?","Iphone7今日发布!","0");  
  113.                           
  114.                         //3.删除特定表中的所有数据  
  115.                         //DataSupport.deleteAll(News.class);  
  116.                           
  117.                         //4.对象可以通过delete()方法自行删除,如果对象没有进行持久化(也就是保存在数据库中)  
  118.                         //例如News news=new News();  
  119.                         //news.delete();  
  120.                         //这样不会删除任何数据  
  121.                         //但是如果对象已经持久化了,会删除此条数据  
  122.                         //News news=new News(); news.save(); news.delete();  
  123.                         /*News news=new News(); 
  124.                         if(news.isSaved())//判断对象是否已经持久化 
  125.                         { 
  126.                                 news.delete(); 
  127.                         }*/  
  128.                         break;  
  129.                 case R.id.btnChange://修改  
  130.                         //一:使用ContentValus修改 这个稍微复杂一点  
  131.                           
  132.                         //1.修改某个id的某个字段  
  133.                         /*ContentValues contentValues1=new ContentValues(); 
  134.                         contentValues1.put("title","Iphone6今日发布!"); 
  135.                                         //三个参数:1.bean(哪张表)  2.值(包含修改的字段以及修改后的值) 3.id 
  136.                         DataSupport.update(News.class,  contentValues1,           10);*/  
  137.                           
  138.                         /**2.根据条件修改 
  139.                          * 注意:updateAll方法中?为占位符,表示条件个数,有多少个"?"后面就要有多少个条件 
  140.                          * */  
  141.                         //1.单个约束条件的修改  
  142.                         /*ContentValues contentValues2=new ContentValues(); 
  143.                         contentValues2.put("title","Iphone6 Plus今日发布!"); 
  144.                         DataSupport.updateAll(News.class, contentValues2, "title=?","Iphone6今日发布!");*/  
  145.                           
  146.                         //2.多个约束条件的修改  
  147.                         /*ContentValues contentValues3=new ContentValues(); 
  148.                         contentValues3.put("title", "Iphone6 Plus今日发布!"); 
  149.                         DataSupport.updateAll(News.class, contentValues3, "title=? and commentCount>?", 
  150.                         "Iphone6今日发布!", 
  151.                         "0");*/  
  152.                           
  153.                         //3:修改整张表的数据:只要将约束条件去掉就行了  
  154.                         /*ContentValues contentValues4=new ContentValues(); 
  155.                         contentValues4.put("title", "Iphone7今日发布!"); 
  156.                         DataSupport.updateAll(News.class, contentValues4);*/  
  157.                           
  158.                         //二:使用LitePal 自定义的修改方式来修改  
  159.                         //1.修改某个id的数据的某个字段  
  160.                         /*News updataNews1=new News(); 
  161.                         updataNews1.setTitle("修改了!"); 
  162.                         updataNews1.update(18);*/  
  163.                           
  164.                         //2.根据条件修改  
  165.                         /*News updataNews2=new News(); 
  166.                         updataNews2.setTitle("今日Iphone10发布"); 
  167.                         updataNews2.updateAll("title=? and id>?","Iphone7今日发布!","11");*/  
  168.                           
  169.                         //3.将 某一字段的数据恢复默认值  
  170.                         /*News updataNews3=new News(); 
  171.                         updataNews3.setToDefault("commentCount"); 
  172.                         updataNews3.updateAll(); 
  173.                         break;*/  
  174.                           
  175.                 case R.id.btnCheck://查询  
  176.                         //1.指定表名与id查询单条数据  
  177.                         /*News news=DataSupport.find(News.class,5); 
  178.                         Toast.makeText(MainActivity.this, news.getPublishDate().toString(), 0).show();*/  
  179.                           
  180.                         //2.查询表中的首条与尾条数据  
  181.                         /*News newsF=DataSupport.findFirst(News.class);//查询首条数据 
  182.                         Toast.makeText(MainActivity.this, newsF.getId()+"", 0).show(); 
  183.                         News newsL=DataSupport.findLast(News.class);//查询尾条数据 
  184.                         Toast.makeText(MainActivity.this, newsL.getId()+"", 0).show();*/  
  185.                           
  186.                         //3.指定多个id查询数据  
  187.                           
  188.                         /*3.1自定义多个id查询 
  189.                          * List<News> myNewsList=DataSupport.findAll(News.class,1,3,5,7,9); 
  190.                         Toast.makeText(MainActivity.this, myNewsList.size()+"", 0).show();*/  
  191.                           
  192.                         /**3.2使用id数组查询:注意ids为Long类型的数组 
  193.                          * */  
  194.                         /*long[] ids=new long[]{2,4,6,8,10}; 
  195.                         List<News> myNewsList=DataSupport.findAll(News.class,ids); 
  196.                         Toast.makeText(MainActivity.this, myNewsList.size()+"", 0).show();*/  
  197.                           
  198.                         //4.查询所有数据  
  199.                         /*List<News> newsList2=DataSupport.findAll(News.class); 
  200.                         Toast.makeText(MainActivity.this, newsList2.size()+"", 0).show();*/  
  201.                           
  202.                         //5.根据其他条件查询数据  
  203.                         //5.1 单条件查询  
  204.                         /*List<News> newsList3=DataSupport.where("commentCount>?","0").find(News.class); 
  205.                         Toast.makeText(MainActivity.this, newsList3.size()+"", 0).show();*/  
  206.                         //5.2 多条件查询  
  207.                         /*List<News> newsList4=DataSupport.where("commentCount=? and id>?","0","5").find(News.class); 
  208.                         Toast.makeText(MainActivity.this, newsList4.size()+"", 0).show();*/  
  209.                           
  210.                         /**6.根据条件查询数据以及查询指定列(一列或几列的数据) 
  211.                          * 你可能并不需要那么多列的数据 
  212.                          * LitePal支持查询自定义列的数据,如果你用get方法获取其他列的数据,你会得到null 
  213.                          * */  
  214.                         /*List<News> newsList5=DataSupport.select("id","content").where("id>?","5").find(News.class); 
  215.                         Toast.makeText(MainActivity.this, newsList5.get(0).getContent(), 0).show();*/  
  216.                           
  217.                         /** 
  218.                          * 7.查询结果排序 
  219.                          * 你可以把查询出的结果按照一个可以比较的字段正序或者倒叙排列, 
  220.                          * 比如说,我希望将查询出的新闻按照发布的时间倒序排列, 
  221.                          * 即最新发布的新闻放在最前面,那就可以这样写 
  222.                          * asc表示正序 desc表示倒序*/  
  223.                         //7.1 排序查找  
  224.                         /*List<News> newsList6=DataSupport.select("id").order("id desc").find(News.class); 
  225.                         Toast.makeText(MainActivity.this, newsList6.get(0).getId()+"", 0).show();*/  
  226.                           
  227.                         //7.2 限制结果条数的查找  
  228.                         /*List<News> newsList7=DataSupport.select("id").order("id desc").limit(5).find(News.class); 
  229.                         Toast.makeText(MainActivity.this, newsList7.get(4).getId()+"", 0).show();*/  
  230.                           
  231.                         /**8.设置偏移量的查询 
  232.                          * 刚才我们查询到的是所有匹配条件的前5条新闻, 
  233.                          * 那么现在我想对新闻进行分页展示, 
  234.                          * 翻到第二页时, 
  235.                          * 展示第6到第10条新闻 
  236.                          * */  
  237.                         /*List<News> newsList8=DataSupport.select("id").order("id desc").limit(5).offset(5).find(News.class); 
  238.                         Toast.makeText(MainActivity.this, newsList8.get(0).getId()+"", 0).show();*/  
  239.                           
  240.                         /**9.激进查询 
  241.                          * 以上查询都只能查询到某一张表的数据,如果我们需要查询关联表的数据,比如通过新闻查到评论数据, 
  242.                          * 就需要使用激进查询了 
  243.                          * */  
  244.                         //9.1比如我们要查询id为1的新闻对应的所有评论,可以这样查  
  245.                         /*News news9=DataSupport.find(News.class, 1, true); 
  246.                         List<Comment> comments=news9.getCommentList();*/  
  247.                           
  248.                         /** 
  249.                          * 这样查询以后commentsList中的数据也会被查询出来 
  250.                          * 但是这样查询有个弊端,一旦关联表中的数据很多,查询速度会非常慢,不推荐这样查询 
  251.                          * 我们可以在模型类中作一点小小的修改,将getCommentList()方法的返回值改为查询数据库的语句 
  252.                          * 那么我们在查询News表的数据时,就会预查询评论表的数据,这样更加高效*/  
  253.                         //9.2预查询  
  254.                         /*News news9=DataSupport.find(News.class, 1,true); 
  255.                         List<Comment> comments=news9.getCommentList(); 
  256.                         Toast.makeText(MainActivity.this,comments.get(0).getContent(), 0).show();*/  
  257.                           
  258.                         /**10.统计查询 
  259.                          * LitePalcount()提供了 
  260.                          * sum()、 
  261.                          * average()、 
  262.                          * max() 
  263.                          * 和min()这五种聚合函数 
  264.                          * */  
  265.                           
  266.                         //10.1:统计一张表的行数  
  267.                         //统计表的行数,不带条件  
  268.                         /*int count1=DataSupport.count(News.class); 
  269.                         Toast.makeText(MainActivity.this,count1+"", 0).show(); 
  270.                         //统计表的行数,带条件 
  271.                         int count2=DataSupport.where("id>?","5").count(News.class); 
  272.                         Toast.makeText(MainActivity.this,count2+"", 0).show();*/  
  273.                           
  274.                         //10.2:统计关联表的数据总数  
  275.                         //例如,统计新闻表中评论的总条数  
  276.                         //三个参数                                                1.表的类名        2.统计的字段名           3.返回值的类型  
  277.                         //int count3=DataSupport.sum(News.class,"commentCount", int.class);  
  278.                           
  279.                           
  280.                         //10.3: 统计平均数  
  281.                         //比如我们要统计平均每条消息,由于平局数一般有小数,所以平局数为double类型  
  282.                         double count4=DataSupport.average(News.class,"commentCount");  
  283.                           
  284.   
  285.                         //10.4: 求最值  
  286.                         //1.最大值  
  287.                         //比如我们想要知道news表中所有新闻里面最高的评论数是多少,就可以这样写  
  288.                         /*int max=DataSupport.max(News.class,"commentCount", int.class); 
  289.                          
  290.                         //2.最小值 
  291.                         int min=DataSupport.max(News.class,"commentCount", int.class);*/  
  292.                         break;  
  293.                 default:  
  294.                         break;  
  295.                 }  
  296.         }  
  297.   
  298. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值