数据库SQLite是一种轻量级的关系型数据库,与大型数据库相比,它的体积小、零配置,能够直接运行在应用程序中,很是设和嵌入式的操做系统。sql
Android中的SQLite:数据库
SQLite的数据库文件默认为与/data/data/package-name/database目录下设计模式
SQLiteOpenHelperapp
要建立一个灵活应用、便于维护的数据库,首先要实现SPLiteOpenHelper的子类函数
数据库最经典的四个操做:添加、删除、修改、查找,在处理大量数据的时候使用数据库能够帮咱们迅速定位当前须要处理的数据,例如要实现一个搜索功能,用数据库的话只须要其中一个搜索条件。一个数据库语句就能够迅速的在N条数据中找到咱们想要的数据。在Android的开发中使用的数据库是SQLite,他是一个轻量级的数据库,很是小,已执行好,效率高,可靠,陷入式设备由于受到硬件条件的限制因此ufeichangshiheshiyongSQLite数据库。工具
建立与删除数据库spa
封装一个类去继承SQLiteOpenHelper,在构造函数中传入数据库名称与数据库版本号,数据库被建立的时候会调用onCreate(SQliteDatabase db)方法,数据库版本号发生改变的时候会调用onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion)方法,能够方便的对软件升级后做出相应处理避免覆盖安装数据库发生改变产省的错误。调用SQLiteOpenHelper的getReadableDatabase()方法去建立数据库,若是数据库不存在则建立并返回SQLiteDatabase对象,若是数据库存在则不建立只返回SQLiteDatabase对象。调用deleteDatabase(DATEVASE_NAME)方法,传入数据库名称及能够删除数据库操作系统
封装了一个DatabaseHelper类继承SQLiteOpenHer,使用单例模式来处理这个类,单例模式是常见的代码设计模式之一,它的好处是避免在内存中的频繁的实例化因此将他的对象写成static静态,这样他的对象就只有一份存在静态内存区,使用的时候只须要经过getInstance()就能够直接拿到这个静态对象。设计
1、SqliteDataBase类指针
Android提供了一个名为SQLiteDatabase的类,该类封装了一些操做数据库的API。一旦应用程序得到了表明指定数据库的SqliteDatabase对象,接下来就可经过SqliteDatabase对象来管理、操做数据库了。
1.1建立数据库和表
1.1.1建立数据库,并得到SqliteDataBase对象。调用SqliteDataBase类的静态方法,能够得到一个数据库对象。
SqliteDataBase.db = SQLiteDataBase.openOrCreateDatabase(path,factory);//打开或建立(不存在则建立)
注意:1.若是指定的数据文件存在则打开,不存在则建立。
2.参数而是指的CursorFactory,传入null则表明使用默认的CursorFactory,通常传入null足够。
1.1.2使用sql语句操做SQLite数据库。建表、数据的CRUD等操做。
注意:SQliteDataBase的execSQL()方法能够执行任意的SQL语句,包括带占位符的SQL语句。可是该方法没有返回值,因此通常只用于执行DDL或DML语句,执行查询语句,则调用SQLiteDataBase的rawQuery()方法。
1.2关于Cursor
当执行查询语句的时候,返回值是一个Cursor对象,这里的Cursor相似于JDBC中的ResultSet。Cursor也提供了一些方法来移动查询结果的记录指针。
1.2.1move(int offset)将指针向上或向下移动指定的行数。offset是证书就是向下,负数就是向上
1.2.2moveToFirst()哟东道第一行,成功则返回true
1.2.3moveToLast()
1.2.4moveToNext()
1.2.5moveToPosition(position)移动到指定的行
1.2.6moveToPrevious()向上移动一行
1.2.7一旦将记录指针移动到指定的行后,接下来就尅调用Cusor对象的getXxx()方法来得到该行记录的数据了。
1.三、关于事务
SQLiteDatabase中包含以下两个方法来控制事务:
beginTransaction() 开始事务
endTransaction() 结束事务
inTransaction() 若是当前上下文处于事务中,则返回true。
关于事务的提交仍是回滚:
在结束事务以前调用setTransactionSuccessful()方法,则当调用结束事务的时候是事务提交。不然事务回滚。
1.4特定方法操做SQLite数据库
若是不动用sql语句,可使用Android提供的专有API操做数据库:insert、update、delete和query方法
insert(table, nullColumHack, values)
update(table, values, whereClause, whereArgs)
delete()
query();
2、SQLiteOpenHelper类(建华或的数据库对象的方式)
直接使用SQLiteDataBase进行数据的建立比较麻烦,Android专门提供了SqliteOpenHelper来建立数据库。
SqliteOpenHelper是一个管理数据库的工具类,用于管理数据库的建立和版本更新。
2.1SQLiteOpenHelper类的构造方法
能够经过继承这个类,实现它的一些方法来对数据库进行一些操做。
全部继承了这个类的类都必须实现下面这样的一个构造方法:
public DatabaseHelper(Context context, String name, CursorFactory factory, int version)
第一个参数:Context类型,上下文对象。
第二个参数:String类型,数据库的名称
第三个参数:CursorFactory类型
第四个参数:int类型,数据库版本
注意:1.数据名称只须要写数据库名就能够,会自动把数据库存到app的目录选
2.CursorFactory通常使用null便可。
2.2SQLiteOpenHelper类的方法
2.2.1 getReadableDatabase()建立或者打开一个可读写的数据库,若是出现问题(磁盘满等),则打开一个只读的数据库。
2.2.2getWritableDatabase()得到一个可读写的数据库。若是磁盘满则会抛出异常。
2.2.3onCreate(SQLiteDataBase db)只有第一次建立这个数据库的时候调用。通常在这个方法中建立数据的相应表。
2.2.4onOpen(SQLiteDatabase db)当每次打开数据库的时候都会调用。这个方法不多使用
2.2.5onUpgrade(SQLiteDatabase db,int oldVersion,int newVersion) 当升级数据库的时候调用
2.2.6close() 关闭打开的全部数据库对象
3、读取数据与ListView结合使用
3.1 把Cursor数据转换成List集合
把Cursor中的数据转换成List集合,而后作Adapter的数据源,来让ListView展现
3.2使用CursorAdapter
构造方法:
public CursorAdapter ( Context context, Cursor c, int flags)
context |
应用程序上下文 |
c |
用于取得数据的游标 |
flags |
用于决定适配器行为的标志位.能够是 FLAG_AUTO_REQUERY 和 FLAG_REGISTER_CONTENT_OBSERVER 的任意组合. |
CursorAdapter继承自BaseAdapter
通常实现腹泻以下两个方法就能够了:
View newView(Context context,Cursor cursor,ViewGroup parent)
为游标指向的数据建立新视图
bindView(View view,Context context,Cursor cursor)
绑定游标指向的数据到传入的view视图中
当数据库中的数据发生变化时:能够调用adapter的changeCursor(newCursor)来更新数据显示,此方法会更新新的Cursor,并关闭旧的Cursor。 不须要另外调用Adapter的notifdataset….