0
点赞
收藏
分享

微信扫一扫

【达内课程】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 是程序运行过程中自动创建的,可以忽略。
【达内课程】SQLite(一)创建数据库、创建数据表、增删改查_sql

创建数据表

【创建数据表】
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 拖拽进来即可
【达内课程】SQLite(一)创建数据库、创建数据表、增删改查_字段_02
左侧列出数据库和表,选中表,点击右侧 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 查看数据
【达内课程】SQLite(一)创建数据库、创建数据表、增删改查_数据_03
报错一

如果我们故意把字段 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 的数据

我们添加数据如下,然后来测试下删除功能
【达内课程】SQLite(一)创建数据库、创建数据表、增删改查_sql_04
删除名字是"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", "删除成功");
}
}

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

修改数据

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

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

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

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

数据查询

【数据查询】
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子句。

举报

相关推荐

0 条评论