数据库:SQLite
一、数据库概念
1. 什么是数据库
数据库就是用来存储和管理数据的仓库!
2. 数据库的发展历程
①没有数据库,使用磁盘文件存储数据;
②层次结构模型数据库;
③网状结构模型数据库;
④关系结构 模型数据库:使用二维表格来存储数据;
⑤关系-对象模型数据库;
MySQL就是关系型数据库!
3. 常见数据库
- Oracle(神喻):甲骨文(最高!);(不是开源的)
- DB2:IBM;
- SQL Server:微软;
- Sybase:赛尔斯;
- MySQL:甲骨文;
4. 理解数据库
- RDBMS = 管理员(manager)+仓库(database)
- database = N个table
- table:
表结构:定义表的列名和列类型!
表记录:一行一行的记录!
我们现在所说的数据库泛指“关系型数据库管理系统(RDBMS - Relational database management system)”,即“数据库服务器”。

当我们安装了数据库服务器后,就可以在数据库服务器中创建数据库,每个数据库中还可以包含多张表。

数据库表就是一个多行多列的表格。在创建表时,需要指定表的列数,以及列名称,列类型等信息。而不用指定表格的行数,行数是没有上限的。下面是tab_student表的结构:

当把表格创建好了之后,就可以向表格中添加数据了。向表格添加数据是以行为单位的!下面是s_student表的记录:
s_id | s_name | s_age | s_sex |
---|---|---|---|
S_1001 | zhangSan | 23 | male |
S_1002 | liSi | 32 | female |
S_1003 | wangWu | 44 | male |
大家要学会区分什么是表结构,什么是表记录。
(4)应用程序与数据库(了解)
应用程序使用数据库完成对数据的存储!

二、SQL语言与SQLite数据库
Google为Andriod的较大的数据处理提供了SQLite,他在数据存储、管理、维护等各方面都相当出色,功能也非常的强大。
- SQLite具备下列特点:
1.轻量级
SQLite和C/S模式的数据库软件不同,它是进程内的数据库引擎,因此不存在数据库的客户端和服务器。使用SQLite一般只需要带上它的一个动态库,就可以享受它的全部功能。而且那个动态库的尺寸也挺小,以版本3.6.11为例,Windows下487KB、Linux下347KB。
2.独立性
SQLite 数据库的核心引擎不需要依赖第三方软件,也不需要所谓的“安装”。
3.隔离性
SQLite 数据库中所有的信息(比如表、视图、触发器等)都包含在一个文件夹内,方便管理和维护。
4.跨平台
SQLite 目前支持大部分操作系统,不止电脑操作系统而且在众多的手机系统也是能够运行的,比如:Android。
5.多语言接口
SQLite 数据库支持多语言编程接口。
6.安全性
- SQLite数据类型
NULL: 这个值为空值
VARCHAR(n):长度不固定且其最大长度为 n 的字串,n不能超过 4000。
CHAR(n):长度固定为n的字串,n不能超过 254。
INTEGER: 值被标识为整数,依据值的大小可以依次被存储为1,2,3,4,5,6,7,8.
REAL:所有值都是浮动的数值,被存储为8字节的IEEE浮动标记序号.
TEXT: 值为文本字符串,使用数据库编码存储(TUTF-8, UTF-16BE or UTF-16-LE).
BLOB: 值是BLOB数据块,以输入的数据格式进行存储。如何输入就如何存储,不改 变格式。
一般boolean类型可以使用这个数据类型
DATA:包含了 年份、月份、日期。
TIME: 包含了 小时、分钟、秒。
- 创建数据库有多种形式,这里采取其中一种创建方式:
步骤:
- 写一个类MySql继承SQLiteOpenHelper
- 重写方法
public MySql(Context context, String name, CursorFactory factory, int version)
public void onCreate(SQLiteDatabase db) //可在此方法中初始化数据库
public void onUpgrade(SQLiteDatabase db, int oldVersion, int newVersion)- 在需要使用的地方 创建 自定义类MySql 对象
// 上下文 库名 默认null 版本号
MySql mySql = new MySql(MainActivity.this, "my.db", null, 1);- 通过MySql 对象 获得数据库读写权限
SQLiteDatabase db = mySql.getWritableDatabase();// 写
SQLiteDatabase db = mySql.getReadableDatabase()// 读
添加
//添加一条数据
public void inserUser(String name, int age){
// 第一次是创建 往后是打开数据库
MySql mySql = new MySql(MainActivity.this, "my.db", null, 1);
SQLiteDatabase db = mySql.getWritableDatabase();// 写数据库权限
// 类似 map 键是列名 键对应的值 列对应的值
ContentValues contentValues = new ContentValues();
contentValues.put("name", name);
contentValues.put("age", age);
db.insert("demo", null, contentValues);
db.close();// 关闭
}
修改
public void upUser(String oldname,int oldage,String newname,int newage){
MySql mySql = new MySql(this, "my.db", null, 1);
SQLiteDatabase db = mySql.getWritableDatabase();
// 修改后的 新数据 键是 列名 值是列对应的值
ContentValues values = new ContentValues();
values.put("name", newname);
values.put("age", newage);
db.update("demo", values , "name = ? and age = ? ", new String[]{oldname,oldage+""});
// whereClause 修改的条件
// whereArgs 修改条件对应的值
// values 修改后的数据 (添加一样)
db.close();
}
删除
public void deleUser(String id){
MySql mySql = new MySql(this, "my.db", null, 1);
SQLiteDatabase db = mySql.getWritableDatabase();
// 表名 条件 条件对应的值(字符串数组)
int delete = db.delete("demo", "id = ?", new String[]{id});
//删除 id = 1 的 一条数据
db.close();
}
查询 所有 数据库
public void query(){
// 第一次是创建 往后是打开数据库
MySql mySql = new MySql(MainActivity.this, "my.db", null, 1);
SQLiteDatabase db = mySql.getWritableDatabase();// 写数据库权限
ArrayList<User> list = new ArrayList<User>();
//查询所有数据
Cursor query = db.query("demo", null, null, null, null, null, null);
while(query.moveToNext()){
//通过列名获得列的下标 通过下标 获得 对应的数据
int id = query.getInt(query.getColumnIndex("id"));
String name = query.getString(query.getColumnIndex("name"));
int age = query.getInt(query.getColumnIndex("age"));
Log.i("tag", "id:"+id+" "+ "name:"+name+" "+"age:"+age );
list.add(new User(id, age, name));
}
Log.i("tag", "========>:"+list.size());
tvshow.setText(list.get(0).getName()+" 集合的数据有:"+list.size());
//关闭数据库
db.close();
}
相关文章:Greendao