当前位置: 移动技术网 > 移动技术>移动开发>Android > Android开发中使用sqlite实现新闻收藏和取消收藏的功能

Android开发中使用sqlite实现新闻收藏和取消收藏的功能

2019年07月24日  | 移动技术网移动技术  | 我要评论

 之前学习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实现新闻收藏和取消收藏的功能,希望对大家有所帮助

如对本文有疑问, 点击进行留言回复!!

相关文章:

验证码:
移动技术网