Android开发之SQLite和ContentProvider介绍

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

SQLite和ContentProvider介绍核心提示:1.第一步在Eclipse中,打开ex08_1_SQLite项目,具体步骤如下。新建一个项目。依次单击FileNewAndroidProject项。在新建项目的对话框中,选择Createprojectfromexistingsource项。单击浏览,找到ex08_1_SQLite项目,然后单击确定。程序的目录结构1.第一步在Eclipse中,打开ex08_1_SQLite项目,具体步骤如下。·新建一个项目。依次单击File→New→AndroidProject项。·在新建项目的对话框中,选择Createprojectfromexistingsource项。·单击浏览,找到ex08_1_SQLite项目,然后单击确定。程序的目录结构如图8-6所示。2.第二步单击运行项目,我们可以看到主界面如图8-7所示,这个界面的布局信息都在main.xml文件中,在一个LinearLayout当中数值排列了5个Button。3.第三步小知识什么是SQLiteDatabase?一个SQLiteDatabase的实例代表了一个SQLite的数据库,通过SQLiteDatabase实例的一些方法,我们可以执行SQL语句,对数据库进行增、删、查、改的操作。需要注意的是,数据库对于一个应用来说是私有的,并且在一个应用当中,数据库的名字也是惟一的。▲图8-6程序目录结构图▲图8-7主界面小知识什么是SQLiteOpenHelper?根据这名字,我们可以看出这个类是一个辅助类。这个类主要生成一个数据库,并对数据库的版本进行管理。当在程序当中调用这个类的方法getWritableDatabase()或者getReadableDatabase()方法的时候,如果当时没有数据,那么Android系统就会自动生成一个数据库。SQLiteOpenHelper是一个抽象类,我们通常需要继承它,并且实现里边的3个函数,具体函数如下所示。·onCreate(SQLiteDatabase):在数据库第一次生成的时候会调用这个方法,一般我们在这个方法里边生成数据库表。·onUpgrade(SQLiteDatabase,int,int):当数据库需要升级的时候,Android系统会主动的调用这个方法。一般我们在这个方法里边删除数据表,并建立新的数据表,当然是否还需要做其他的操作,完全取决于应用的需求。·onOpen(SQLiteDatabase):这是当打开数据库时的回调函数,一般也不会用到。我们在ActivityMain文件中看下边这个内部类。DatabaseHelper类继承SQLiteOpenHelper,具体代码如下所示:privatestaticclassDatabaseHelperextendsSQLiteOpenHelper{DatabaseHelper(Contextcontext){super(context,DATABASE_NAME,null,DATABASE_VERSION);}@OverridepublicvoidonCreate(SQLiteDatabasedb){//SQL语句Stringsql=CREATETABLE+TABLE_NAME+(+TITLE+textnotnull,+BODY+textnotnull+);;Log.i(haiyang:createDB=,sql);//执行这条SQL语句db.execSQL(sql);}@OverridepublicvoidonUpgrade(SQLiteDatabasedb,intoldVersion,intnewVersion){}}代码解释:·DatabaseHelper类继承了SQLiteOpenHelper类,并且重写了onCreate和onUpgrade方法。·在onCreate()方法里边首先我们构造一条SQL语句,然后调用db.execSQL(sql)执行SQL语句。这条SQL语句为我们生成了一张数据库表。·目前我们还不需要升级数据库,所以我们在onUpgrade()函数里边没有执行任何操作。4.第四步我们单击插入两条记录的按钮,如果数据成功插入到数据库当中的diary表中,那么在界面的title区域就会有成功的提示,如图8-8所示。单击这个按钮后,程序执行了监听器里的onClick方法,并最终执行了上述程序里的insertItem方法,其具体代码如下所示:privatevoidinsertItem(){SQLiteDatabasedb=mOpenHelper.getWritableDatabase();//首先生成SQL语句Stringsql1=insertinto+TABLE_NAME+(+TITLE+,+BODY+)values('haiyang','Android的发展真是迅速啊');;Stringsql2=insertinto+TABLE_NAME+(+TITLE+,+BODY+)values('icesky','Android的发展真是迅速啊');;try{Log.i(haiyang:sql1=,sql1);Log.i(haiyang:sql2=,sql2);db.execSQL(sql1);db.execSQL(sql2);setTitle(插入两条数据成功);}catch(SQLExceptione){setTitle(插入两条数据失败);}}代码解释:·SQLiteDatabasedb=mOpenHelper.getWritableDatabase()这条语句负责得到一个可写的SQLite数据库,如果这个数据库还没有建立,那么mOpenHelper辅助类负责建立这个数据库。如果数据库已经建立,那么直接返回一个可写的数据库。·sql1和sql2是我们构造的标准的插入SQL语句,如果对SQL语句不是很熟悉,可以参考相关的书籍。鉴于本书的重点是在Android方面,所以对SQL语句的构建不进行详细的介绍。·Log.i()会将参数内容打印到日志当中,并且打印级别是Info级别,在使用LogCat工具的时候我们会进行详细的介绍。·db.execSQL(sql1)语句对SQL语句进行执行。小知识对Android的打印级别介绍Android支持5种打印级别,分别是Verbose、Debug、Info、Warning、Error,当然我们在程序当中一般用到的是Info级别,即将一些自己需要知道的信息打印出来,如图8-9所示。▲图8-9Android中的5种打印级别注意虽然执行SQL语句在Android当中并没有强制放在trycatch语句当中,但是我们最好这么做。并在catch模块中将错误信息打印在日志当中。这样一方面是方便调试,另一方面可以加强程序的健壮性。5.第五步单击查询数据库的按钮,会在界面的title区域显示当前数据表当中数据的条数,刚才我们插入了两条,那么现在单击后应该显示为两条,如图8-10所示。单击这个按钮后,程序执行了监听器里的onClick方法,并最终执行了上述程序里的showItems方法,具体代码如下所示:privatevoidshowItems(){SQLiteDatabasedb=mOpenHelper.getReadableDatabase();Stringcol[]={TITLE,BODY};//进行数据库查询Cursorcur=db.query(TABLE_NAME,col,null,null,null,null,null);Integernum=cur.getCount();setTitle(Integer.toString(num)+条记录);}代码解释:·SQLiteDatabasedb=mOpenHelper.getReadableDatabase()语句首先得到一个可写的数据库。·Cursorcur=db.query(TABLE_NAME,col,null,null,null,null,null)语句将查询到的数据放到一个Cursor当中。这个Cursor里边封装了这个数据表TABLE_NAME当中的所有条列。query()方法相当的有用,在这里我们简单地讲一下。·第一个参数是数据库里边表的名字,比如在我们这个例子,表的名字就是TABLE_NAME,也就是diary。·第二个字段是我们想要返回数据包含的列的信息。在这个例子当中我们想要得到的列有title、body。我们把这两个列的名字放到字符串数组里边来。·第三个参数为selection,相当于SQL语句的where部分,如果想返回所有的数据,那么就直接置为null。·第四个参数为selectionArgs。在selection部分,你有可能用到“?”,那么在selectionArgs定义的字符串会代替selection中的“?”。·第五个参数为groupBy。定义查询出来的数据是否分组,如果为null则说明不用分组。·第六个参数为having,相当于SQL语句当中的having部分。·第七个参数为orderBy,来描述我们期望的返回值是否需要排序,如果设置为null则说明不需要排序。·Integernum=cur.getCount()语句通过getCount()方法,可以得到Cursor当中数据的个数。小知识什么是Cursor?Cursor在Android当中是一个非常有用的接口,通过Cursor我们可以对从数据库查询出来的结果集进行随机的读写访问。6.第六步单击删除一条数据库的按钮后,如果成功删除,我们可以看到在屏幕的标题(title)区域有文字提示,如图8-11所示。现在我们再单击查询数据库按钮,看数据库里边的记录是不是少了一条。单击查询数据库按钮后,出现如图8-12所示的界面。▲图8-11成功删除一条记录▲图8-12还剩一条记录下面我们来看一下如何删除数据。单击删除一条记录的按钮后,程序执行了监听器里的onClick方法,并最终执行了上述程序里的deleteItem方法,其代码如下所示:privatevoiddeleteItem(){try{SQLiteDatabasedb=mOpenHelper.getWritableDatabase();//进行删除操作db.delete(TABLE_NAME,title='haiyang',null);setTitle(删除title为haiyang的一条记录);}catch(SQLExceptione){}}代码解释:·db.delete(TABLE_NAME,title='haiyang',null)语句删除了一条title='haiyang'的数据。当然如果有很多条数据title都为'haiyang',那么一并删除。我们对delete方法的参数进行以下介绍。·第一个参数是数据库表名,在这里是TABLE_NAME,也就是diary。·第二个参数,相当于SQL语句当中的where部分,也就是描述了删除的条件。·如果在第二个参数当中有“?”符号,那么第三个参数中的字符串会依次替换在第二个参数当中出现的“?”符号。7.第七步单击删除数据表,我们可以删除diary这张数据表,如图8-13所示。下边我们看在代码部分,是怎么实现删除的,具体代码如下所示:privatevoiddropTable(){SQLiteDatabasedb=mOpenHelper.getWritableDatabase();Stringsql=droptable+TABLE_NAME;try{//执行SQL语句db.execSQL(sql);setTitle(数据表成功删除:+sql);}catch(SQLExceptione){setTitle(数据表删除错误);}}代码解释:首先我们构造了一个标准的删除数据表的SQL语句,然后执行这条语句db.execSQL(sql)。8.第八步现在单击其他的按钮,程序运行时有可能会出现异常,我们单击重新建立数据表按钮,如图8-14所示。现在我们单击查询数据库,看

1 / 45
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功