Android内置了SQLite,SQLite是一款轻量级的关系型数据库,运算速度快,占用资源少。
1.创建数据库
首先需要用到SQLiteOpenHelper,
SQLiteOpenHelper |
+ onCreate(db : SQLiteDatabase) : void + onUpdate(db : SQLiteDatabase, oldVersion : int, newVersion : int) : void + getReadableDatabase() : SQLiteDatabase + getWritableDatabase() : SQLiteDatabase |
需自创帮助类继承SQLiteOpenHelper并重写onCreate和onUpdate方法才能实现创建、升级数据库的目的。
一般使用带四个参数的构造方法创建帮助类,(Context context, String name(数据库名), CursorFactory factory(一般为null), int version(当前数据库版本号))。
创建实例后,调用两个get方法时onCreate方法也会得到执行,并且只会在数据库第一次创建时执行,可以在create方法里处理建表逻辑。
2.查看数据库
adb是android SDK自带调试工具,它可以直接对连接在电脑上的手机或模拟器进行调试操作。adb在sdk的platform-tools目录下。要想在命令行中使用,先配置环境变量,win10系统下:此电脑-->属性-->高级系统设置-->环境变量,在系统变量里找到Path,将platform-tools的路径添加进去。命令行操作如下:
- adb shell 功能:进入设备的控制台
- cd /data/data/<项目名>/databases/ 功能:进入该项目的数据库目录
- sqlite3 <数据库名> 功能:进入该数据库
- .table 功能:显示该数据库下所有的表
- .schema 功能:查看所有表的建表语句
3.升级数据库
在SQLiteOpenHelper构造方法中传入比之前版本号大的数就能执行onUpdate方法,在方法中编写删除之前存在的表的语句,再调用onCreate方法就能实现升级数据库的功能。
4.数据库增删改查
通过getWritableDatabase方法获得SQLiteDatabase对象。
I.添加数据
使用insert方法添加数据,方法接收三个参数,第一个参数为表名,第二个参数一般默认为null,第三个参数为ContentValues对象,通过该对象一系列重载的put方法将数据填入。
II.更新数据
使用update方法更改数据,方法接收四个参数,第一个参数为表名,第二个参数为ContentValues对象,通过put方法放入要修改的数据,第三、四个参数用于约束更改哪些行的数据,不指定意味着更改所有行。例如,update("Book",values,"name=?",new String[]{"Hello World"}),意思是修改所有name等于第四个参数中字符串数组中任意一个值的行。
III.删除数据
使用delete方法删除数据,方法接收三个参数,第一个参数为表名,第二三个参数同update方法中的第三四个参数作用一样,指定具体操作哪些行,不指定意味着删除所有行。
IV.查询数据
使用query方法查询数据,最少参数的重载方法有7个参数,第一个参数依然为表名,第二个参数指定查询哪几列,不指定就为所有列,第三个四个参数用于约束查询哪些行,不指定就查询所有行,第五个参数指定用于group by的列,不指定表示不进行group by操作,第六个参数表示对group by的数据进一步过滤,不指定表示不过滤,第七个参数指定查询结果的排序方式,不指定表示默认排序方式。详细内容如下表,
query()方法参数 | 对应SQL部分 | 描述 |
---|---|---|
table | from table_name | 指定查询的表名 |
columns | select column1,column2 | 指定查询的列名 |
selection | where column=value | 指定where的约束条件 |
selectionArgs | - | 为where中的占位符提供具体的值 |
groupBy | group by column | 指定需要group by的列 |
having | having column=value | 对group by后的结果进一步约束 |
orderBy | order by column1,column2 | 指定查询结果的排序方式 |
使用query方法会返回一个Cursor对象,调用该对象的moveToFirst方法可以移到数据的第一行,有数据会返回true,无则返回false,接着调用getColumnIndex(<列名>)得到某一列在表中的位置索引,再通过getString/getInt/getDouble等方法得到数据,不断地调用moveToNext方法可以遍历所有值。