【达内课程】SQLite(一)创建数据库、创建数据表、增删改查

介绍

SQLite 是一种数据库存储数据的软件,是非数据库服务器软件。

SQLite 存储技术适用于存储有结构的数据,且可以存储大量的数据,在数据访问上也有非常高的效率,使用 SQLite 存储技术存储的数据,最终表示为 App 中的一个文件。

创建数据库

【创建数据库】
在 Activity 或 Service 中,使用 openOrCreateDatabase(String name,int mode,CursorFactory factory)方法,即可创建或打开数据(如果数据库存在,则直接打开;如果不存在,则先创建再打开)。该方法第 1 个参数为需要打开的数据库的文件名,通常在使用 SQLite 数据库时,推荐创建时给数据库文件加上 .db 扩展名;该方法的第 2 个参数表示访问模式,使用 MODE_PRIVATE;该方法的第 3 个参数无视,直接写 null 即可。

MainActivity

public class MainActivity extends AppCompatActivity {
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建数据库
        createDatabase();
    }

    private void createDatabase() {
        String name = "test.db";
        int mode = MODE_PRIVATE;
        SQLiteDatabase.CursorFactory cursorFactory = null;
        openOrCreateDatabase(name, mode, cursorFactory);
    }
}

运行程序,然后打开 Device File Exploer,找到data->data->包名->databases会看到自己创建的数据库 test.db。test.db-journal 是程序运行过程中自动创建的,可以忽略。
在这里插入图片描述

创建数据表

【创建数据表】
SQL语法:CREATE TABLE 数据表名 (字段设计列表)
字段设计语法:字段名称 字段数据类型 字段约束
字段设计列表:多个字段设计之间使用逗号进行分隔
例如:CREATE TABLE users (name VARCHAR(10) UNIQUE NOT NULL, age INTEGER,phone CHAR(11) UNIQUE,email VARCHAR(32) UNIQUE)

MainActivity

public class MainActivity extends AppCompatActivity {
    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建数据库
        createDatabase();
        //创建数据表
        createTable();
    }

    private void createDatabase() {
        String name = "test.db";
        int mode = MODE_PRIVATE;
        SQLiteDatabase.CursorFactory cursorFactory = null;
        db = openOrCreateDatabase(name, mode, cursorFactory);
    }

    private void createTable() {
        String sql = "CREATE TABLE users (" +
                "name VARCHAR(10) UNIQUE NOT NULL, " +
                "age INTEGER, " +
                "phone CHAR(11) UNIQUE, " +
                "email VARCHAR(32) UNIQUE" +
                ")";
        db.execSQL(sql);
    }
}

运行程序后,找到数据库文件,导出,使用 Sqlite Expert 查看,用法很简单,直接把 test.db 拖拽进来即可
在这里插入图片描述
左侧列出数据库和表,选中表,点击右侧 Design 可查看表结构。

我们创建数据库的时候写的是openOrCreateDatabase,打开或创建数据库,如果不存在该数据库就创建,如果存在就打开
而创建表是CREATE TABLE,会一直创建,所以如果再执行一遍程序,会崩溃,报表已存在的错:table users already exists

我们先把createTable()注释掉,然后进行后边的操作

增加数据/插入数据

【增加数据/插入数据】
SQL语句:INSERT INTO 数据表名 (字段列表) VALUES (值列表)
例如:INSERT INTO users (name,age,phone,email) VALUES ('Errol',22,'13333333333','errol@qq.com')

INSERT INTO users (phone,email,name,age) VALUES ('13333333333','errol@qq.com','Errol',22)

INSERT INTO users (name,age) VALUES ('Errol',22)

如果是字符串,需要用单引号标记,不能使用双引号

现在增加一条数据

MainActivity

public class MainActivity extends AppCompatActivity {
    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建数据库
        createDatabase();
        //创建数据表
        //createTable();
        //增加数据
        insertData();
    }
    ......
    private void insertData() {
        String sql = "INSERT INTO users " +
                "(name,age,phone,email) " +
                "values " +
                "('Errol',22,'13333333333','errol@qq.com')";
        db.execSQL(sql);
    }
}

执行程序,再次导出 test.db,用刚才的工具打开,点击右侧 Data 查看数据
在这里插入图片描述
报错一

如果我们故意把字段 name 写错成 nama 会报错提示没有相应字段

table users has no column named nama (code 1):

其实SQL语句不区分大小写,只要拼写正确即可

报错二

我们已经成功插入了一条数据,由于刚才创建约束的时候名字是unique的,所以如果我们再运行程序,再插入相同数据,会提示你UNIQUE constraint failed: users.email,说明 users.email本应是唯一的,现在却重复了

修改 SQL 语句,多增加几条数据

private void insertData() {
        /*String sql = "INSERT INTO users " +
                "(name,age,phone,email) " +
                "values " +
                "('Errol',22,'13333333333','errol@qq.com')";*/

        String sql = "INSERT INTO users " +
                "(name,age,phone,email) " +
                "values " +
                "('Tony',27,'18716000000','tony@qq.com')";
        db.execSQL(sql);
    }

删除数据

【删除数据】
SQL 语法:DELETE FROM 数据表名 [WHERE字句]
WHERE字句中的运算符:= > < >= <= <> AND OR NOT
WHERE 子句示例:
WHERE name = 'Billy'
WHERE age > 30
WHERE name='Errol' AND email='123@qq.com'
WHERE 子句用于匹配已经存在的记录,如果找到匹配的(若干条)记录,则这些匹配的记录将被操作。

如果没有 WHERE,表示匹配该表中的所有数据,即:将删除整张表的所有数据,删除操作是不可恢复的!!

DELETE 语句示例:
DELETE FROM users 删除 users 表中所有数据
DELETE FROM users WHERE name='Billy'删除 users 表中 name 字段值为 Billy 的数据
DELETE FROM users WHERE name='Billy' AND email='billy@qq.com'删除 users 表中 name 字段值为 Billy,且 email 字段的值为 billy@qq.com 的数据
DELETE FROM users WHERE name='Billy' OR age>30删除 users 表中的 name 字段值为 Billy 或 age 字段值大于30 的数据

我们添加数据如下,然后来测试下删除功能
在这里插入图片描述
删除名字是"Billy" 或 年龄大于 30 的数据

MainActivity

public class MainActivity extends AppCompatActivity {
    private SQLiteDatabase db;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        //创建数据库
        createDatabase();
        //创建数据表
        //createTable();
        //增加数据
        //insertData();
        //删除数据
        deleteData();
    }
	......
    private void deleteData() {
        String sql = "DELETE FROM users WHERE name = 'Tony' OR age > 30";
        db.execSQL(sql);
        Log.d("SQL", "删除成功");
    }
}

在这里插入图片描述

修改数据

【修改数据】
SQL 语法:UPDATE 数据表名 SET 字段赋值列表 [WHERE子句]
字段赋值:字段名=值
示例:UPDATE users SET age=20,phone='18888888888' WHERE name='Errol'

原始数据
在这里插入图片描述

private void updateData() {
	String sql = "UPDATE users SET age = 24 WHERE name = 'Errol'";
	db.execSQL(sql);
}

修改后的数据
在这里插入图片描述

数据查询

【数据查询】
SQL 语法:SELECT 字段列表 FROM 数据表名 [WHERE子句] [ORDER BY子句]
ORDER BY子句:用于对查询结果进行排序
ORDER BY子句语法:ORDER BY (字段名 排序规则)列表
ORDER BY子句示例:
ORDER BY age查询结果将根据 age 字段的值顺序(升序)排列
ORDER BY age ASC查询结果将根据 age 字段的值顺序(升序)排列
ORDER BY age DESC查询结果将根据 age 字段的值倒序(降序)排列
ORDER BY age DESC,name ASC查询结果将优先根据 age 字段倒序排列,如果某些数据 age 字段相同,则这些数据将再根据 name 字段的值升序排列

使用星号(*)表示字段列表部分是所有字段
示例:SELECT * FROM users 查询 users 数据表中所有数据的所有字段
SELECT * FROM users WHERE age > 20查询 users 数据表中 age 字段值大于 20 的数据的所有字段
SELECT name,age FROM users查询 users 数据表中所有数据的 name、age 字段

除以上内容外,SELECT 语法中还可以有 GROUP BY子句、HAVING子句、LIMIT子句。

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值