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实现新闻收藏和取消收藏的功能,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对脚本之家网站的支持!

时间: 2024-09-12 15:46:02

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

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

 之前学习oracle,简单的认为数据库只存在服务器端,学习安卓之后才发现原来android和Ios本身是"携带"数据库的--SQLite,是轻量级的.嵌入式的.关系型数据库,是Android.IOS等广泛使用的的数据库系统.用于存储本地的一直状态.刚写出来一个实现新闻收藏的功能,写出来供大家参考. 在Android中我们通过SQLiteDatabase这个类的对象操作SQLite数据库.由于SQLite数据库并不需要像C/S数据库那样建立连接以及身份验证的特性,以及SQLite数据库

Android开发中使用SQLite 数据库

SQPte 一个非常流行的嵌入式数据库,它支持 SQL 语言,并且只利用很少的内存就有很好的性能.此外它还是开源的,任何人都可以使用它.许多开源项目((Mozilla, PHP, Python)都使用了 SQPte. SQPte 由以下几个组件组成:SQL 编译器.内核.后端以及附件.SQPte 通过利用虚拟机和虚拟数据库引擎(VDBE),使调试.修改和扩展 SQPte 的内核变得更加方便. 图 1. SQPte 内部结构 开发中使用SQLite 数据库-android sqlite数据库"&g

Android开发中的SQLite优化

关于SQLite的优化,首先是能用SQL语句批次处理的,就不要单笔操作,Cursor就更是能不用就不用.比如成批的DELETE/UPDATE,将条件组装到SQL语句,会比使用CURSOR一条条的查再删效率要高很多(若干年前就曾使用存储过程代替单笔操作,将一次批量计算时间从一天缩到了数分钟以内,参考).其次是对操作的优化:对于INSERT/UPDATE操作较多时使用事务,如果SELECT操作较多时,使用索引. 结合现在的工作,发现针对操作的优化,下面这篇文章可以翻译出来归档.以下为正文: SQLi

sqlite-Android开发中与Sqlite数据库相似的数据库

问题描述 Android开发中与Sqlite数据库相似的数据库 目前Android开发中本地数据库只能用Sqlite数据库嘛?有没有其他数据库可选?(本人知道Sqlite这个很好,但是新手想知道都有什么选择) 解决方案 Android开发之Sqlite数据库android开发之sqlite数据库增删改查Android开发之SQLite数据库 解决方案二: 只能用sqlite,但是对其支持的框架可选 解决方案三: 好像是只能用SQLite 解决方案四: 还是选通用的吧,而且貌似只有sqlite 解

android开发中sqlite的使用

问题描述 android开发中sqlite的使用 请问在开发中sqlite的使用广泛吗?求举个例子使用sqlite完成什么功能,学了知识点不知什么情况会用到,各位前辈们求指点啊! 解决方案 使用数据库实现对数据的存储. 下面上一个小例子,写日记. 效果如下: ? ? ?? ?? 当LIstView中没有数据显示时,我们需要告诉用户没有数据. 方法有二: 1. activity继承ListActivity,在布局文件中如下编写: android:id="@id/android:empty"

android缓存处理-Android开发中客户端如何进行数据的存储

问题描述 Android开发中客户端如何进行数据的存储 Android开发中客户端如何进行数据的存储以达到数据的缓存来减少与服务端的交互次数,并设置缓存时间?(求大神指导,最好有完整的代码) 十分需要!求帮助! 解决方案 推荐在客户端使用sqlite来存放本地的数据.因为是数据库,所以很多底层的事情不用考虑了.要放缓存,直接建立一个字段,获取的时间,这样判断下,如果超过,就再次访问服务器获取.

Android开发中ImageView的scaletype属性用法分析_Android

本文实例讲述了Android开发中ImageView的scaletype属性用法.分享给大家供大家参考,具体如下: ImageView的属性android:scaleType,即 ImageView.setScaleType(ImageView.ScaleType).android:scaleType是控制图片如何 resized/moved来匹对ImageView的size.ImageView.ScaleType / android:scaleType值的意义区别: CENTER /cente

Android开发中Intent用法总结_Android

本文实例讲述了Android开发中Intent用法.分享给大家供大家参考,具体如下: Android手机软件开发中,Intent作为手机软件开发时很重要的对象需要引起我们的重视,实际上,intent也是体现Android开发具有其独特性的一个标志性的对象. 当一个Activity要启动另外一个Activity的时候,也许一个以前较为熟悉的模式是:调用一个new函数,直接创建具有窗口特征类的对象,又或者直接调用一个启动函数来启动.这种方式简洁.明了,但是却违背了Android开发的理念.Andro

Android开发中setContentView和inflate的区别分析_Android

本文实例讲述了Android开发中setContentView和inflate的区别.分享给大家供大家参考,具体如下: 一般用LayoutInflater做一件事:inflate inflate这个方法总共有四种形式(见下面),目的都是把xml表述的layout转化为View对象. 其中有一个比较常用,View inflate(int resource, ViewGroup root),另三个,其实目的和这个差不多. int resource,也就是resource/layout文件在R文件中对