你的位置:首页 > 软件开发 > 操作系统 > android菜鸟学习笔记20

android菜鸟学习笔记20

发布时间:2015-07-10 18:00:21
Android内置了一个名为SQLite的关系型数据库,这是一款轻量型的数据库,操作十分简便。SQLite与别的数据库不同的是,它没有数据类型。可以保存任何类型的数据到你所想要保存的任何表的任何列中。但它又支持常见的类型比如: NULL, VARCHAR, TEXT, INTEG ...

android菜鸟学习笔记20

Android内置了一个名为SQLite的关系型数据库,这是一款轻量型的数据库,操作十分简便。SQLite与别的数据库不同的是,它没有数据类型。可以保存任何类型的数据到你所想要保存的任何表的任何列中。但它又支持常见的类型比如: NULL, VARCHAR, TEXT, INTEGER, BLOB, CLOB...等。

唯一的例外是:integer primary key 此字段只能存储64位整数。

在JAVA项目中,要使用JDBC操作数据库需要加载数据库驱动,连接数据库等操作。Android简化了我们的数据库操作,无需由我们进行数据库驱动加载、连接等操作。

Android中进行数据库操作,需要涉及到如下几个类:

1)SQLiteOpenHelper:

android.database.sqlite包下,这是一个抽象的帮助类,用于管理数据库的创建及版本维护操作。

我们在需要获取该类的对象时,需要自定义类继承自SQLiteOpenHelper类,并实现其中的onCreate(SQLiteDatabase), onUpgrade(SQLiteDatabase, int, int),可以选择性地实现 onOpen(SQLiteDatabase)。这个类会自动帮助我们在需要时打开数据库,在不存在时创建数据库,在必要时更新数据库。

常用方法:

 android菜鸟学习笔记20

一般,在自定义的子类中调用父类中第一个构造方法即可。

构造函数的参数说明:

context:应用的上下文对象

name:要操作的数据库的名称

factory:cursor工厂类对象,一般指定为null

version:数据库的版本号,必须大于等于1,由于控制数据库的升级。

 android菜鸟学习笔记20

注意到,只有onCreate()和onUpgrade()是抽象方法,所以自定义子类继承SQLiteOpenHelper时,一定要实现这两个方法。

其中:

onCreate()方**在数据库不存在,第一次创建时调用,所以数据库中的初始化操作,如创建表等操作需要在该方法中完成。

onUpgrade()方法,新的版本号比原来有提升时,调用,用以完成数据库的升级操作,如新版本的app中,需要添加一张表,或者修改某个表,就需要在新版本的app创建SQLiteOpenHelper对象时,向其构造函数传入一个更大的版本号,这个版本号会被newVersion接收。

 android菜鸟学习笔记20

getReadaleDatabase()方法,创建或打开一个数据库,返回代表该数据库的只读的SQLiteDatabase对象

getWritableDatabase()方法,创建或打开一个数据库,返回代表该数据库的可读可写的SQLiteDatabase对象。

 android菜鸟学习笔记20

close()方法,用于关闭打开的数据库对象。

2)SQLiteDatabase:

通过SQLiteOpenHelper对象获取SQLiteDatabase对象后,便可以调用SQLiteDatabase类的相关方法进行数据库的增删改查操作了。

该类的常用方法有:

 android菜鸟学习笔记20

execSQL()方法用于执行SQL语句,可以用于执行不需要返回值的一些数据库操作。

 android菜鸟学习笔记20

rawQuery()方法一般被用于执行需要返回值的查询操作,查询的结果保存在Cursor对象中。

除了直接执行SQL语句进行数据库操作的方法之外,该类还封装几个更易用的增删改查方法。

 android菜鸟学习笔记20

insert()方法,用于向数据库中插入数据,参数说明:

table:指定要插入数据的表明

nullColumnHack:一般指定为null即可

注意:当values也为null,表示想向数据库中插入一条空记录时,该方法实际执行的SQL语句为insert into table(null) values(null);这样一条sql语句是没法执行的,所以,需要将nullColumnHack指定为任意一个可以为空的字段的字段名。如:nullColumnHack指定为”name”,values为null,此时SQL语句为insert into table(name) values(null);则可以正常执行了。

values:是一个ContentValues对象,用于存放要插入的各个字段名与值的对应关系。

 android菜鸟学习笔记20

delete()方法,用于删除表中的记录,参数说明:

table指定要操作的表名

whereClause指定where字句,可以包含占位符”?”,如“name = ?”,实际执行时,占位符会被第三个参数中对应索引的值替换

whereArgs:指定where字句中,占位符对应的值,如new String[]{“zhangsan”}

实际执行的语句就是delete from table where name = “zhangsan”

 android菜鸟学习笔记20

update()方法,用于执行表中记录的更新操作,参数说明:

table,whereClause,whereArgs与delete相同含义

values用于指定对应字段名要更新的值的映射关系。

 android菜鸟学习笔记20

query()记录查询方法,最简单的一个重载形式也有七个参数,都是select中的各个字句部分,如where子句部分,group by子句部分,having,order by等。参数说明:

table指定要查询的表名

colmns指定要查询的字段

selection:可以带占位符的where子句部分

slectionArgs:where子句占位符对应的值

groupBy:group by子句部分

having:having子句部分

orderBy:order by 子句部分

等等

 android菜鸟学习笔记20

isOpen()判断数据库是否已打开。

 android菜鸟学习笔记20

beginTransaction()用于开启事务操作

 android菜鸟学习笔记20

setTransactionSuccessful()方法用于标记事务操作成功

 android菜鸟学习笔记20

endTransaction()方法用于关闭事务,若事务标记成功,则提交事务操作,否则,则回滚失败的事务操作。

其他方法,在需要时,可以查询API帮助手册。

3)Cursor:

Cursor是一个接口,其实现类用于存放SQL语句查询的结果集。SQLiteDatabase的rawQuery()及query()方法均会返回该接口的对象,用以存储操作查询返回的结果集。

Cursor对象维持一个游标,默认指向结果集第一条记录之前的位置,可以通过下面几个方法,来移动游标,从而取得需要的记录。当游标已在第一条记录之前,调用moveToPreious(),或者已指向最后一条记录,调用moveToNext()方法时,均会返回false()标识移动失败。

 android菜鸟学习笔记20

 android菜鸟学习笔记20

getShort()、getString()、getInt()等getXXX()方法,用于根据当前记录的字段的索引获取字段的值。

 android菜鸟学习笔记20

getColumnName()用于根据索引获取字段名

getColumnNames()用于获取所有的字段名,其顺序与在Cursor中保存的顺序相同。

getCount()用于获取当前Cursor对象中保存的记录数。

 android菜鸟学习笔记20

getColumnCount()方法用于获取记录的字段总数

getColumnIndex()用于根据字段名获取其索引,不存在时返回-1。

 android菜鸟学习笔记20

close()方法,用于关闭当前Cursor对象。

4)ContentValues:

该类用于存放键值对的数据,在数据库的插入更新等操作中,可以使用字段名作为键,使用要插入或更新的字段值作为值。

常用的是put()方法,向ContentValues对象中存储数据。

如:put(“name”,”zhangsan”);等

以上便是数据库操作所涉及的几个主要的类和接口。

下面通过一个具体的代码,来学习使用这些个API:

第一步:

自定义类继承SQLiteOpenHelper类,实现onCreate()和onUpgrade()方法:

 1 public class MySqliteHelper extends SQLiteOpenHelper { 2  3    public static final String TAG = "MYSQLITEHELPER"; 4  5    public static final String CREATE_STUDENT = "create table t_student (" + 6  7         "id integer primary key, name varchar(20), gender varchar(10), age integer)"; 8  9    public MySqliteHelper(Context context, String name, CursorFactory factory,10 11         int version) {12 13      super(context, name, factory, version);14 15    }16 17    @Override18 19    public void onOpen(SQLiteDatabase db) {20 21      Log.i(TAG,"open db");22 23      super.onOpen(db);24 25    }26 27    @Override28 29    public void onCreate(SQLiteDatabase db) {30 31      Log.i(TAG,"create db");32 33      Log.i(TAG,"before excSql");34 35       db.execSQL(CREATE_STUDENT);36 37      Log.i(TAG,"after excSql");38 39    }40 41    @Override42 43    public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion) {44 45 46    }47 48 }

原标题:android菜鸟学习笔记20

关键词:Android

*特别声明:以上内容来自于网络收集,著作权属原作者所有,如有侵权,请联系我们: admin#shaoqun.com (#换成@)。

可能感兴趣文章

我的浏览记录