安卓基础学习 Day 25|数据库SQLite

关于SQLite

SQL本质上是一种编程语言,它的学名叫作"结构化查询语言”(全称为Structured Query Language,简称SQL)。不过SQL语言并非通用的编程语言,它专用于数据库的访问和处理,更像是一种操作命令,所以常说SQL语句而不说SQL代码。标准的SQL语句分为3类:数据定义、数据操纵和数据控制,但不同的数据库往往有自己的实现。

SQLite是一种小巧的嵌入式数据库,使用方便、开发简单。如同MySQL、Oracle那样,SQLite也采用SQL语句管理数据,由于它属于轻型数据库,不涉及复杂的数据控制操作,因此App开发只用到数据定义和数据操纵两类SQL。此外,SQLite的SQL语法与通用的SQL语法略有不同,接下来介绍的两类SQL语法全部基于SQLite。

语法常识

数据定义语言

数据定义语言全称Data Definition Language,简称DDL,它描述了怎样变更数据实体的框架结构。
就SQLite而言DDL语言主要包括3种操作:创建表格、删除表格、修改表结构,分别说明如下。
(1)创建表格
表格的创建动作有create命令完成,格式为“CREATE TABLE IF NOT EXISTS 表格名称(以逗号分隔各字段定义);”。
以用户信息表为例:
CREATE TABLE IF NOT EXISTS user_info(
	_id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL,
	name VARCHAR NOT NULL,
	age INTEGER NOT NULL,
	height LONG NOT NULL,
	weight FLOAT NOT NULL,
	married INTEGER NOT NULL,
	update_time VARCHAR NOT NULL);
);
上面的SQL语法与其他数据库的SQL语法有所出入:
  1. SQL语句不区分大小写无论是create与table这类关键词还是表格名称、字段名称,都不区分大小写。
  唯一区分大小写的是被单引号括起来的字符串值。
  2. 为避免重复建表,应加上IFNOT EXISTS关键词,例如**CREATE TABLE IFNOT EXISTS表格名称...…**
  3.  SQLite支持整型INTEGER、长整型LONG、字符串VARCHAR、浮点数FLOAT,但不支持布尔类型。
  布尔类型的数据要使用整型保存,如果直接保存布尔数据,在入库时SQLite会自动将它转为0或1,
  其中0表示false,1表示true。
  4. 建表时需要唯一标识字段,它的字段名为id。创建新表都要加上该字段定义,例如:
  **id INTEGER PRIMARY KEY AUTOINCREMENT NOT NULL**
(2)删除表格
表格的删除动作由drop命令完成,格式为“DROP TABLE IF EXISTS表格名称;"。
下面是删除用户信息表的SQL语句例子:
**DROP TABLE IF EXISTS user_info;**
(3)修改表结构
表格的修改动作由alter命令完成,格式为“ALTER TABLE 表格名称修改操作"。
不过SQLite只支持增加字段,不支持修改字段,也不支持删除字段。
对于字段增加操作,需要在alter之后补充add命令,
具体格式如'ALTER TABLE 表格名称 ADD COLUMN字段名称字段类型”。
下面是给用户信息表增加手机号字段的SQL语句例子:
**ALTER TABLE user_info ADD COLUMN phone VARCHAR;**
注意,SQLite的ALTER语句每次只能添加一列字段,若要添加多列,就得分多次添加。

数据库操纵语言

数据操纵语言全称Data Manipulation Language,简称DML,它描述了怎样处理数据实体的内部记录。
表格记录的操作类型包括添加、删除、修改、查询4类,分别说明如下:
(1)添加记录
记录的添加动作由insert命令完成,格式为"INSERT INTO表格名称(以逗号分隔的字段名列表)VALUES
(以豆号分隔的字段值列表);"。下面是往用户信息表插入一条记录的SQL语句例子:
**INSERT INTO user_info (name , age ,height , weight, married ,update_time)
VALUES ('张三',20,170,50,0, '20200504');**
(2)删除记录
记录的删除动作由delete命令完成,格式为“DELETE FROM表格名称WHERE 查询条件;",
其中查询条件的表达式形如“字段名-字段值",多个字段的条件交集通过“AND"连接,条件并集通过“OR"连接。
下面是从用户信息表删除指定记录的SQL语句例子:
**DELETE FROM user_info wHERE name='张三';**
(3)修改记录
记录的修改动作由update命令完成,格式为"UPDATE里表格名称SET字段名=字段值WHERE查询条件;"。
下面是对用户信息表更新指定记录的SQL语句例子:
**UPDATE user_info SET married=1 WHERE name='张三';**
(4)查询记录
记录的查询动作由select命令完成,格式为"SELECT以逗号分隔的字段名列表FROM表格名称 WHERE 查询条件;"。
如果字段名列表填星号“*”,则表示查询该表的所有字段。下面是从用户信息表查询指定记录的SQL语句例子:
**SELECT name FROM user_info WHERE name='张三';**
查询操作除了比较字段值条件之外,常常需要对查询结果排序,此时要在查询条件后面添加排序条件,对应的表达式
"ORDER BY字段名ASC或者DESC",意指对查询结果按照某个字段排序,其中ASC代表升序,DESC代表降序。
下面是查询记录并对结果排序的SQL语句例子:
**SELECT *FROM user_info ORDER BY age ASC;**

数据管理器SQLiteDatabase

SQLiteDatabase是SQLite的数据库管理类,它提供了若干操作数据表的APl,常用的方法有3类:

  • 管理类:用于数据库层面的操作
    openDatabase:打开指定路径的数据库
    isOpen:判断数据库是否已打开
    close:关闭数据库
    getVersion:获取数据库的版本号
    setVersion:设置数据库的版本号
  • 事务类:用于事务层面的操作
    beginTransaction:开始事务
    setTransactionSuccessful:设置事务的成功标志
    endTransaction:结束事务
  • 数据处理类:用于数据表层面的操作
    execSQL:执行拼接好的SQL控制语句
    delete:删除符合条件的记录
    update:更新符合条件的记录。
    insert:插入一条记录。
    query:执行查询操作,返回结果集的游标
    rawQuery:执行拼接好的SQL查询语句,返回结果集的游标

数据库帮助器 SQLiteOpenHelper

SQLiteOpenHelper是Android提供的数据库辅助工具,用于指导开发者进行SQLite的合理使用。
SQLiteOpenHelper的具体使用步骤如下:

  • 新建一个继承自SQLiteOpenHelper的数据库操作类,提示重写onCreate和onUpgrade两个方法。
  • 封装保证数据库安全的必要方法。
  • 提供对表记录进行增加、删除、修改、查询的操作方法。

案例

editext_selector文件

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:drawable="@drawable/shape_edit_focus" android:state_checked="false" />
    <item android:drawable="@drawable/shape_edit_normal" />
</selector>

shape_edit_focusshape_edit_normal两个xml文件中没有写东西直接创建两个xml文件即可】

布局资源文件

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:padding="5dp"
    tools:context=".SQLiteHelperActivity">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="姓名"
            android:textColor="@color/black"
            android:textSize="17dp" />

        <EditText
            android:id="@+id/et_name"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginTop="3dp"
            android:layout_marginBottom="3dp"
            android:layout_weight="1"
            android:background="@drawable/editext_selector"
            android:hint="请输入姓名"
            android:inputType="text"
            android:maxLength="12"
            android:textColor="@color/black"
            android:textSize="17sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation="horizontal">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="match_parent"
            android:gravity="center"
            android:text="年龄"
            android:textColor="@color/black"
            android:textSize="17dp" />

        <EditText
            android:id="@+id/et_age"
            android:layout_width="0dp"
            android:layout_height="match_parent"
            android:layout_marginTop="3dp"
            android:layout_marginBottom="3dp"
            android:layout_weight="1"
            android:background="@drawable/editext_selector"
            android:hint="请输入年龄"
            android:inputType="number"
            android:maxLength="2"
            android:textColor="@color/black"
            android:textSize="17sp" />
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="40dp"
        android:orientation=
  • 1
    点赞
  • 14
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

小鲁不吃猪蹄

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值