SQLite数据库

SQLite数据库


使用SQLite便于存储有规则的数据,并且,便于实现对数据的管理,包括增加数据、修改数据、删除数据、查询数据。

数据库(Database):表示为一个文件,是多张数据表的容器

数据表(Table):具体存储数据的表格

一.创建数据库


调用Context定义openOrCreateDatabase(String name, int mode, CursorFactory factory)方法即可创建并打开/直接打开数据库!

二.创建数据表

创建数据表的SQL语法:

CREATE TABLE 数据表名称 (字段(列)设计列表)

字段设计的语法:

字段名称 字段数据类型 字段约束

在字段设计列表中,各字段设计之间使用英语的逗号进行分隔

示例:

CREATE TABLE users (name VARCHAR(8) NOT NULL UNIQUE, age INTEGER, tel VARCHAR(11))

1.增(INSERT):增加数据 / 插入数据

增加数据的SQL语法:

INSERT INTO 数据表名称 (字段列表) VALUES (值列表)

示例:

INSERT INTO users (name, age, tel) VALUES ('王海涛', 35, '10086')

INSERT INTO users (name) VALUES ('成恒')

INSERT INTO users (age, name, tel) VALUES (30, '徐铭', '10001')

insert()方法

long insert(String table, String nullColumnHack, ContentVavlues values)

参数1:数据表名称

参数2:仅当第3个参数为null,或第3个参数没有封装数据时会被使用,通常应该取值为最重要的字段的名称

参数3:需要操作的数据,该类型有无参数的构造方法,创建对象后,可以调用put(String key, ??? value)方法封装数据,其中,key必须是字段名,value是该字段对应的值

返回值:返回新增加的数据的ID,该ID值是从1开始顺序编号的,如果增加数据失败,则返回-1

2.删(DELETE):删除数据

删除数据的SQL语法:

DELETE FROM 数据表名称 [WHERE子句]

WHERE子句用于对数据进行筛选,仅满足条件的那一部分数据将被执行操作,WHERE子句的语法:

WHERE 关系表达式或逻辑表达式

SQL中关系运算符或逻辑运算符:

> < = <> >= <= AND OR NOT

示例:

DELETE FROM users -> 删除users数据表中所有的数据!不推荐使用!

DELETE FROM users WHERE age>=0-> 删除users数据表中所有age字段的值大于或等于0的数据

DELETE FROM users WHERE name='王海涛'-> 删除users数据表中所有name字段的值为’王海涛’的数据

DELETE FROM users WHERE name='王海涛' AND age>=30 -> 删除users数据表中所有name字段的值为’王海涛’的,并且age字段的值大于或等于30的数据

DELETE FROM users WHERE name='王海涛' OR age>=30-> 删除users数据表中所有name字段的值为’王海涛’的,或者age字段的值大于或等于30的数据

delete()方法

int delete(String table, String whereClause, String[] whereArgs)

参数1:数据表名称

**参数2:**WHERE子句,不包含WHERE关键字,且在WHERE子句的各个值都推荐使用问号(?)表示

参数3:如果第2个参数中使用到了问号(?),则该参数应该表示第2个参数中各个问号(?)对应的值

返回值:受影响的行数,即执行删除操作则表示删除了多少行数据

3.改(UPDATE):修改数据

修改数据的SQL语法:

UPDATE 数据表名称 SET 字段赋值列表 [WHERE子句]

示例:

UPDATE users SET age=30-> 将users数据表中所有的数据的age字段的值修改为30

UPDATE users SET age=30 WHERE name='王海涛'-> 将users数据表中name字段的值为’王海涛’的数据的age字段的值修改为30

UPDATE users SET age=30, tel='10000' WHERE name='王海涛' 将users数据表中name字段的值为’王海涛’的数据的age字段的值修改为30,并且tel字段的值修改为’10000’

update()方法

int update(String table, ContentValues values, String whereClause, String[] whereArgs)

参数1:参考insert()方法

参数2:参考insert()方法

参数3:参考delete()方法

参数4:参考delete()方法

返回值:参考delete()方法

4.查(QUERY):查询数据 / 获取数据

查询数据的语法:

SELECT 字段列表 FROM 数据表名称 [WHERE子句][GROUP BY子句][HAVING子句][ORDER BY子句]

在以上语法中,字段列表可以使用星号(*)表示所有

ORDER BY子句的语法:

字段名称 排序规则 [, 字段名称 排序规则……]

示例:

SELECT name, age, tel FROM users-> 查询users数据表中所有数据的name、age、tel字段的值

SELECT age, name, tel FROM users-> 查询users数据表中所有数据的age、name、tel字段的值

SELECT * FROM users-> 查询users数据表中所有数据的所有字段的值,列的顺序将按照数据表的设计顺序排列

SELECT * FROM users WHERE age>=20-> 查询users数据表中所有age字段的值大于或等于20的数据的所有字段的值,列的顺序将按照数据表的设计顺序排列

SELECT * FROM users WHERE age>=20 ORDER BY age-> 查询users数据表中所有age字段的值大于或等于20的数据的所有字段的值,列的顺序将按照数据表的设计顺序排列,查询结果将根据age字段的值升序(顺序)排列

SELECT * FROM users WHERE age>=20 ORDER BY age DESC -> 查询users数据表中所有age字段的值大于或等于20的数据的所有字段的值,列的顺序将按照数据表的设计顺序排列,查询结果将根据age字段的值降序(倒序)排列

SELECT * FROM users WHERE age>=20 ORDER BY age ASC, name DESC -> 查询users数据表中所有age字段的值大于或等于20的数据的所有字段的值,列的顺序将按照数据表的设计顺序排列,查询结果将根据age字段的值升序(顺序)排列,如果某些数据的age字段值是相同的,则这部分的数据将再根据name字段的值降序(倒序)排列

三.Cursor:游标

1.move系列方法
  • boolean moveToFirst() -> 移动到第1行,返回值表示移动操作是否成功
  • boolean moveToLast()-> 移动到最后一行,返回值表示移动操作是否成功
  • boolean moveToPrevious() -> 移动到上一行,返回值表示移动操作是否成功
  • boolean moveToNext() -> 移动到下一行,返回值表示移动操作是否成功
  • boolean moveToPosition(int position) -> 移动到第position行,该position的值是从0开始顺序编号的,返回值表示移动操作是否成功
  • boolean move(int offset) -> 移动offset位置,即在当前位置的基础上移动多少,取值可以是正数,也可以是负数,返回值表示移动操作是否成功
2.is系列方法
  • boolean isFirst()-> 当前是否在第1行数据的位置
  • boolean isLast() -> 当前是否在最后一行数据的位置
  • boolean isBeforeFirst() -> 当前是否在第1行数据之前的位置
  • boolean isAfterLast()-> 当前是否在最后一行数据之后的位置
  • boolean isClosed() -> 当前Coursor是否已经关闭
  • boolean isNull(int columnIndex) -> 第columnIndex列的数据是否为null值
3.get系列方法
  • ??? get???(int columnIndex) -> 获取第columnIndex列的数据,此处的???可以是支持的某种数据类型,例如getString或getInt等
  • int getColumnIndex(String columnName)-> 获取名称为columnName的列的索引
4.遍历Cursor
  • 初始条件:c.moveToFirst()
  • 循环条件:!c.isAfterLast() / c.moveToNext()
  • 条件自变:c.moveToNext()
  • 循环体:获取数据
    if (c.moveToFirst()) {
      while(!c.isAfterLast()) {
        // 获取数据

        c.moveToNext();
      }
    }
    if (c.moveToFirst()) {
      do {
        // 获取数据
      } while(c.moveToNext());
    }
    if (c.moveToFirst()) {
      for (; !c.isAfterLast(); c.moveToNext()) {
        // 获取数据
      }
    }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值