Android环境搭建 Android编码规范 Android网络编程 Android数据储存

Sqlite数据库操作



Sqlite数据库简介

 

Sqlite数据库特征,在操作的过程中,需要保存一些数据,如果只是使用sharedPreferences,以及内部存储外部存储,比如用户偏好只是存储一些简单的配置信息,是以键值对形式保存的,而外部存储是保存在sd中的,如果我们要保存一些关系型的数据,比如要保存一条一条的用户信息,操作数据库要好一些。

 


Sqlite数据库特点


支持增删查改。

称之为小型的嵌入式关系型数据库。依赖于文件系统,可以直接获取该数据库对象。

没有用户账户的概念。在数据库中表中的字段可以不定义字段类型。但是为了程序员之间

进行交互,便于数据库的移植,一般在指定字段的时候需要指定该字段的类型。

 


在项目中使用Sqlite数据库

 

在项目中新建了一个util包,在包中创建一个MyOpenHelper类。这个类是操作数据库的公共类,在util包中创建一个类,专门用于操作数据库对象。在android中想要使用数据库,系统规定了我们必须继承,一个类SQLiteOpenHelper。


android1.png 

打开SQLiteOpenHelper,在系统当中定义的是,一个帮助类,来管理数据库对象,创建以及版本的管理,在这里可以实现数据库的创建,以及版本的更新。


android2.png 

在继承了SQLiteOpenHelper类之后,有些提示,这里面需要实现两个方法,分别是onCreate,onUpgrade。onCreate方法又被称作为数据库创建的时候执行的方法。onUpgrade方法是数据库升级执行的方法。


android3.png

 

把这两个方法调用出来之后,SQLiteOpenHelper还是有错误提示,它需要我们创建一个,构造数据库对象,来匹配父类的一个函数,点击创建一下。


android4.png 


可以看到这个MyOpenHelper类当中,存在一系列的参数,进入SQLiteOpenHelper查看这些参数的信息。来看一下它的构造函数,如果我们调用的是一个父类的函数,比如使用context对象,string类型的name,以及cursorfactory factory,int类型的 version的时候,它其实是给我们一些参数定义。


android5.png 

context是用来打开或者是创建一个数据库对象使用的一个上下文, 

Name,它是数据库的一个名称,如果是空的话使用in-memory内部的一个存储对象。 

Factory:用来创建游标对象的一个工厂对象,同样系统告诉我们,如果你使用空的话,其实是默认,默认就是用为空。

Version:就是当前数据库的一个版本号,这个版本是从1版本而来的。

 

回到MyOpenHelper当中,如果我们想要去创建一个数据库,在一个应用工程当中,一般来说数据库结构是有一个,并且这个cursorfactory factory它也经常会使用到空,Version版本号经常会直接指定。在这个种构造方法调用的时候,为了保证外部调用比较清楚,会把一些常用的值,就不用再制定。在下方直接写出。


android6.png 

 

比如叫做messgage.db,同样Factory指定为null,Version版本先指定一个,1版本,这个1可以使用常量值替代。


android7.png 

 

android8.png 


这两个方法,首先onCreate:调用的时候,如果是在当前数据库对象,创建并且是第一次创建的时候,这个方法就会被调用。


 

android9.png 


在这里面加一个Log,同样把这个Log函数也提交到下方。


android10.png 


更名为onUpgrade。


android11.png 

 

对于这个函数怎么帮我们创建一个数据库对象,肯定要执行MyOpenHelper类构造函数,针对这个构造函数执行。在Util包中创建一个方法类MessagrDao。把它当做一个公共类,用来保存当前数据库操作的一些实例方法。不过在这里面,我们直接把它放在了util包中,比如这里面封装了增删查改的方法。我们把它的构造方法写出来


android12.png 


在这个方法当中,创建刚刚拿到的MyOpenHelper这个对象,所以在这里面写一个MyOpenHelper,new MyOpenHelper上面这里面就需要传入上下文,但是现在又没有上下文。


android13.png 

 

android14.png 


在这个当中把它当做如果谁调用上下文对象,就把它给传进来,所以在这里面也写一个参数。


android15.png 

 

那个里面就可以封装,context对象


android16.png

android17.png 

 

这里面就是创建SQLiteOpenHelper公共来类对象。


android18.png

 

有了这些对象之后,就可以调用MyOpenHelper,getReadableDatabase也是先以读写的形式去获取一个数据库对象,但是当前数据库的磁盘空间满了的情况下,会以只读的方式打开,但是getwritabledatabase只是以读写的形式进行打开,当磁盘满了的时候,会报错。所以一般使用getReadableDatabase;


 

android19.png 


给它定义一个返回值,就叫做db对象。把db对象提取到外界


android20.png 


接下来所有的对象都有可能使用到sqlite db


android21.png 


在这里面进行封装,这种形式就是获取可以操作的数据库对象,有了数据库对像之后,就可以直接去操作数据库里面的一些内容


 

android22.png 


这个MessageDao如果它想要去调用我们还需要对应的一个类。在公共类当中来创建一个SQLiteActivity类,把这个内容,称之为操作数据库的页面,后续设计案例去呈现它,先把它的业务逻辑先来拿到,让它继承Activity。重写里面的onCreate方法,在加载一个布局。


android23.png


创建activity_sqlite.xml布局,里面放一个TextView控件。在AndroidManifest中注册一下并设置为首启动。

 

android24.png 

在SQLiteActivity声明出来了刚刚写的MessageDao。


android25.png 


之后在onCreate方法中,如果对messageDao进行一个new操作,这里面天上下文的时候,可以直接使用this,表示当前Activity的上下文。


android26.png 

 

这样就会连续调用,当前这个MessageDao的构造函数,在这个构造函数中,又去获取到一个可读写的数据库对象,当它执行可读写的数据库对象的时候,它其实就来到了这里面的MyOpenHelper中,去创建一个数据对象,为message.db的文件。并且当前数据库版本为一。


android27.png 


最后启动程序看看这两个方法可不可以执行到。



【本文由麦子学院独家原创,转载请注明出处并保留原文链接】

logo
© 2012-2016 www.maiziedu.com
蜀ICP备13014270号-4 Version 5.0.0 release20160127

麦子大聚惠,豪华礼包你领了吗?

客服热线 400-862-8862

回到顶部