Android开发中使用sqlite实现新闻收藏和取消收藏的功能
之前学习oracle,简单的认为数据库只存在服务器端,学习安卓之后才发现原来android和ios本身是“携带”数据库的——sqlite,是轻量级的、嵌入式的、关系型数据库,是android、ios等广泛使用的的数据库系统。用于存储本地的一直状态。刚写出来一个实现新闻收藏的功能,写出来供大家参考。
在android中我们通过sqlitedatabase这个类的对象操作sqlite数据库。由于sqlite数据库并不需要像c/s数据库那样建立连接以及身份验证的特性,以及sqlite数据库单文件数据库的特性,使得获得sqlitedatabase对象就像获得操作文件的对象那样简单。
sqlite要经过创建数据库、创建表,然后进行增删改查等功能。所以第一步,创建一个数据库,sqliteopenhelper是一个抽象类,来管理数据库的创建和版本的管理。要使用它必须实现它的ncreate(sqlitedatabase),onupgrade(sqlitedatabase, int, int)方法
//创建数据库,建表 privatestaticfinal string dbname="news.db"; privatestaticfinalint version=3; //设置版本号 privatestaticfinal string tbl_detailnews="news"; //创建表名为news的表 privatestaticfinal string tbl_detailnews_column_title="_title"; privatestaticfinal string tbl_detailnews_column_url="_url"; privatestaticfinal string tbl_detailnews_column_docid="_docid"; privatestaticfinal string tbl_detailnews_column_state="_state"; public newsdbhelper(context context){ super(context,dbname,null,version); } @override publicvoid oncreate(sqlitedatabase db) { // todo auto-generated method stub16 stringbuffer sb=new stringbuffer(); sb.append("create table if not exists "); sb.append(tbl_detailnews+"("); sb.append(tbl_detailnews_column_docid +" varchar(100) primary key ,"); //设置主键 sb.append(tbl_detailnews_column_title+ " varchar(100) ,"); sb.append(tbl_detailnews_column_url+" varchar(100) ,"); sb.append(tbl_detailnews_column_state+" integer "); sb.append(")"); db.execsql(sb.tostring()); } @override publicvoid onupgrade(sqlitedatabase db, int oldversion, int newversion) { string sql2="drop table if exists "+tbl_detailnews; db.execsql(sql2); //创建 oncreate(db); }
android提供了一个名为sqlitedatabase的类,它封装了一些操作数据库的api。使用它能实现基本的crud操作,通过getwritabledatabase()和getreadabledatabase()可以获取数据库实例,便可以写一些dao层的方法来进行对表的操作:
publicclass detailnewsdao { private newsdbhelper helper; public detailnewsdao(context context){ helper=new newsdbhelper(context); //与数据库建立连接 } //插入数据 publicvoid insertdetsilnews(news news){ sqlitedatabase db=helper.getwritabledatabase(); db.execsql("insert into news(_title,_url,_docid)" + //将要收藏新闻的标题title,标识docid,详细地址url传入数据库,便可以依此打开新闻详显 "values(?,?,?)",new string[]{news.gettitle(),news.getdetailurl(),news.getdocid()}); db.close(); } //删除数据 publicvoid del(string docid){ //根据传入参数docid删除数据 sqlitedatabase db=helper.getreadabledatabase(); db.execsql("delete from news where _docid = ?",new object[]{docid}); db.close(); } //查询数据 public list<news> findselected(){ sqlitedatabase db=helper.getreadabledatabase(); cursor c=db.rawquery("select * from news", null); //只有对数据进行查询时,才用rawquery(),增、删、改和建表,都用execsql() list<news> list=new arraylist<news>(); while(c.movetonext()){ news news=new news(); news.settitle(c.getstring(c.getcolumnindex("_title"))); news.setdetailurl(c.getstring(c.getcolumnindex("_url"))); news.setdocid(c.getstring(c.getcolumnindex("_docid"))); list.add(news); } c.close(); db.close(); return list; } }
用actionbar做好菜单按钮,点击收藏,执行代码 :
if(item.gettitle().equals("收藏")){ toast.maketext(this,"收藏成功", toast.length_long).show(); detailnewsdao.insertdetsilnews(news); item.settitle("取消收藏"); }else{ detailnewsdao.del(news.getdocid()); toast.maketext(this,"取消收藏", toast.length_long).show(); item.settitle("收藏"); }
以上所述是小编给大家介绍的android开发中使用sqlite实现新闻收藏和取消收藏的功能,希望对大家有所帮助
上一篇: 模拟QQ心情图片上传预览示例