「Android 数据库」关系型数据库 SQLIt 详解
Android 内置了一个名为 SQLite 的关系型数据库,这是一款轻量型的数据库,操作十分简便

SQLite与别的数据库不同的是,它没有数据类型。可以保存任何类型的数据到你所想要保存的任何表的任何列中。但它又支持常见的类型比如: NULL, VARCHAR, TEXT, INTEGER, BLOB, CLOB…等。
- 唯一的例外是:integer primary key 此字段只能存储64位整数。
- 在JAVA项目中,要使用JDBC操作数据库需要加载数据库驱动,连接数据库等操作
- Android简化了我们的数据库操作,无需由我们进行数据库驱动加载、连接等操作。
关系型数据库 SQLIte 简介
每个应用程序都要使用数据,Android应用程序也不例外,Android使用开源的、与操作系统无关的SQL数据库—SQLite
SQLite第一个Alpha版本诞生于2000年5月,它是一款轻量级数据库,它的设计目标是嵌入式的,占用资源非常的低,只需要几百K的内存就够了。SQLite已经被多种软件和产品使用,Mozilla FireFox就是使用SQLite来存储配置数据的,Android和iPhone都是使用SQLite来存储数据的。
- SQLite数据库是一种用于手机app的轻量型数据库;
- Android系统封装了一个类:SqliteOpenHelper(它是抽象类)是主要用来使用的SQLite的
- 但实际使用SQLite数据有更加方便与便捷的方法:Room三角色的创建;
创建数据库
- Activity_main.java
- Activity_main.xml
- MySQLiteOpenHelper.java
Activity_main.java
package com.example.sqlite;
import androidx.appcompat.app.AppCompatActivity;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
}
/**
* 生成数据库:database
* @param view
*/
public void create_base(View view) {
SQLiteOpenHelper helper = MySQLiteOpenHelper.GetmInstance(this);
//数据库的创建,靠下面下面这个代码,和这句一样:helper.getWritableDatabase();
SQLiteDatabase read = helper.getReadableDatabase();
}
}
Activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
xmlns:android="http://schemas.android.com/apk/res/android">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="生成数据库"
android:onClick="create_base"/>
</LinearLayout>
MySQLiteOpenHelper.java
package com.example.sqlite;
import android.content.Context;
import android.database.DatabaseErrorHandler;
import android.database.sqlite.SQLiteDatabase;
import android.database.sqlite.SQLiteOpenHelper;
import android.os.Build;
import androidx.annotation.NonNull;
import androidx.annotation.Nullable;
import androidx.annotation.RequiresApi;
/**
* MysqliteOpenHelper 工具类 单例模式(1,构造函数私有化 2,对外提供函数)
*/
public class MySQLiteOpenHelper extends SQLiteOpenHelper {
//1.构造函数私有化
private MySQLiteOpenHelper(@Nullable Context context, @Nullable String name, @Nullable SQLiteDatabase.CursorFactory factory, int version) {
super(context, name, factory, version);
}
//2.提供外部函数
private static SQLiteOpenHelper mInstance;
public static synchronized SQLiteOpenHelper GetmInstance(Context context){
if (mInstance == null){
//数据库名字叫“basedata.db”
mInstance = new MySQLiteOpenHelper(context,"basedata.db",null,1);
}
return mInstance;
}
//初始化数据库时使用
@Override
public void onCreate(SQLiteDatabase sqLiteDatabase) {
}
//数据库升级时使用
@Override
public void onUpgrade(SQLiteDatabase sqLiteDatabase, int i, int i1) {
}
}
下面介绍几个在SQLite中常用到的adb命令:
查看
.database 显示数据库信息; .tables 显示表名称; .schema 命令可以查看创建数据表时的SQL命令; .schema table_name 查看创建表table_name时的SQL的命令;
插入记录
insert into table_name values (field1, field2, field3...);
查询
select * from table_name;查看table_name表中所有记录; select * from table_name where field1='xxxxx'; 查询符合指定条件的记录;
删除
drop table_name; 删除表; drop index_name; 删除索引;
# sqlite3 stu_db sqlite3 stu_db SQLite version 3.6.22 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .schema .schema CREATE TABLE android_metadata (locale TEXT); CREATE TABLE stu_table(id int,sname varchar(20),sage int,ssex varchar(10)); --->创建的表 sqlite> select * from stu_table; select * from stu_table; 1|xiaoming|21|male sqlite>
插入数据
sqlite> insert into stu_table values(2,'xiaohong',20,'female');
插入的数据记得要和表中的属性一一对应
insert into stu_table values(2,'xiaohong',20,'female'); sqlite> select * from stu_table; select * from stu_table; 1|xiaoming|21|male 2|xiaohong|20|female --------------> 插入的数据 sqlite>
当点击修改数据的按钮时候
sqlite> select * from stu_table; select * from stu_table; 1|xiaoming|23|male -------------->年龄被修改为23 2|xiaohong|20|female sqlite>
当点击删除数据的按钮
sqlite> select * from stu_table; select * from stu_table; 1|xiaoming|23|male id=2的数据已经被删除
总之,我们可以在代码中执行数据库的增删改查,也可以在adb命令行下实现。 不过因为SQLite没有客户端,不能直接的查看数据库变化后的信息,所以常用adb命令行查看数据库改变后的信息。
关系型数据库 SQLIte 功能特性
- ACID事务
- 零配置 – 无需安装和管理配置
- 储存在单一磁盘文件中的一个完整的数据库
- 数据库文件可以在不同字节顺序的机器间自由的共享
- 支持数据库大小至2TB
- 足够小, 大致13万行C代码, 4.43M
- 比一些流行的数据库在大部分普通数据库操作要快
- 简单, 轻松的API
- 包含TCL绑定, 同时通过Wrapper支持其他语言的绑定
- 良好注释的源代码, 并且有着90%以上的测试覆盖率
- 独立: 没有额外依赖
- 源码完全的开源, 你可以用于任何用途, 包括出售它
- 支持多种开发语言,C, C++, PHP, Perl, Java, C#,Python, Ruby等
有需要文中代码的同学,可以顺手给我点赞评论支持一下
获取方式:私信发送“底层源码” 即可 免费获取;现在私信还可获取一份 Android 开发系统学习资料笔记

PS:有问题欢迎指正,可以在评论区留下你的建议和感受;
欢迎大家点赞评论,觉得内容可以的话,可以转发分享一下