在Android平台上,集成了一个嵌入式关系型数据库---SQLite,SQLite3支持 NULL、INTEGER、REAL(浮点数字)、TEXT(字符串文本)和BLOB(二进制对象)数据类型,虽然它支持的类型只有五种,但实际上sqlite3也接受varchar(n)、char(n)、decimal(p,s)等数据类型,只不过在运算或保存时会转成对应的五种数据类型。 SQLite最大的特点是你可以把各种类型的数据保存到任何字段中,但是主键只能是Integer类型的。Sqlite数据库一般要求主键是_id,当然也可以是id。android里面的数据库是由底层的sqilte.c的代码来动态生成的。
详细使用参考: 【Android入门到项目实战--4.5】------ SQLite数据库存储实现增删改查_android sqlite数据库增删改查-CSDN博客
Android Room 是 Android 官方提供的一个持久性库,用于在 Android 应用程序中管理数据库。它提供了一个对象关系映射(ORM)层,允许您在应用程序中使用对象来表示数据库表和数据行,并自动生成与之相关的SQL查询和操作。
Room使用
1.在build.gradle文件中添加依赖
java
def room_version = "2.6.1"
implementation "androidx.room:room-runtime:$room_version"
annotationProcessor "androidx.room:room-compiler:$room_version"
2.创建一个数据实体类:实体表示应用的数据库中的表。数据实体用于更新表中的行所存储的数据以及创建新行供插入。
使用 Room 实体定义数据 | Android Developers (google.cn)
3.创建一个数据访问对象 (DAO):提供在数据库中查询、更新、插入和删除数据的方法。
使用 Room DAO 访问数据 | Android Developers (google.cn)
4.创建一个数据库类:数据库类用于定义实体和数据访问对象的列表。它也是底层连接的主要访问点。
java
@Database(entities = {Student.class},version = 1,exportSchema = false)
public abstract class StudentDatabase extends RoomDatabase {
public abstract StudentDao getStudentDao();
private static StudentDatabase INSTANCE;
public static synchronized StudentDatabase getInstance(Context context){
if (INSTANCE == null){
INSTANCE = Room.databaseBuilder(context.getApplicationContext(),StudentDatabase.class
,"student_database")
.build();
}
return INSTANCE;
}
}
- 该类必须带有@Database注解,entities指明包含的实体, version表明版本,将
version
设为1
。每当更改数据库表的架构时,都必须提升版本号。将exportSchema
设为false
,这样就不会保留架构版本记录的备份。 - 该类必须是一个抽象类,用于继承RoomDatabase。
- 对于与数据库关联的每个 DAO 类,数据库类必须定义一个具有零参数的抽象方法,并返回 DAO 类的实例。
- 使用Room的Room.databaseBuilder创建数据库。不过,仅当该数据库不存在时才应创建。否则,请返回现有数据库。
5.创建一个类实现数据库异步操作
java
public class DBEngine {
private StudentDao studentDao;
public DBEngine(Context context) {
StudentDatabase studentDatabase = StudentDatabase.getInstance(context);
studentDao = studentDatabase.getStudentDao();
}
public void insertStudents(Student... students){
new InsertAsyncTask(studentDao).execute(students);
}
public void deleteStudents(Student... students){
new DeleteAsyncTask(studentDao).execute(students);
}
public void updateStudents(Student... students){
new UpdateAsyncTask(studentDao).execute(students);
}
public void deleteAllStudent(){
new DeleteAllAsyncTask(studentDao).execute();
}
public void queryStudents(){
new QueryAllAsyncTask(studentDao).execute();
}
//插入
static class InsertAsyncTask extends AsyncTask<Student,Void,Void>{
private StudentDao dao;
public InsertAsyncTask(StudentDao studentDao) {
dao = studentDao;
}
@Override
protected Void doInBackground(Student... students) {
dao.insertStudents(students);
return null;
}
}
//修改
static class UpdateAsyncTask extends AsyncTask<Student,Void,Void>{
private StudentDao dao;
public UpdateAsyncTask(StudentDao studentDao) {
dao = studentDao;
}
@Override
protected Void doInBackground(Student... students) {
dao.updateStudents(students);
return null;
}
}
//删除
static class DeleteAsyncTask extends AsyncTask<Student,Void,Void>{
private StudentDao dao;
public DeleteAsyncTask(StudentDao studentDao) {
dao = studentDao;
}
@Override
protected Void doInBackground(Student... students) {
dao.deleteStudents(students);
return null;
}
}
//全部删除
static class DeleteAllAsyncTask extends AsyncTask<Void,Void,Void>{
private StudentDao dao;
public DeleteAllAsyncTask(StudentDao studentDao){
dao = studentDao;
}
@Override
protected Void doInBackground(Void... voids) {
dao.deleteAllStudents();
return null;
}
}
//全部查询
static class QueryAllAsyncTask extends AsyncTask<Void,Void,Void>{
private StudentDao dao;
public QueryAllAsyncTask(StudentDao studentDao){
dao = studentDao;
}
@Override
protected Void doInBackground(Void... voids) {
List<Student> allStudents = dao.getAllStudents();
for (Student s : allStudents) {
Log.e("search", "doInBackground:全部查询每一项"+ s.toString() );
}
return null;
}
}
6.MainActivity
java
public class MainActivity2 extends AppCompatActivity {
private DBEngine dbEngine;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
dbEngine = new DBEngine(this);
}
public void insertAction(View view) {
Student student = new Student("jerry",8);
Student student1 = new Student("tom",9);
Student student2 = new Student("jack",10);
dbEngine.insertStudents(student,student1,student2);
}
public void deleteAction(View view) {
Student student = new Student(null,0);
student.setId(2);
dbEngine.deleteStudents(student);
}
public void updateAction(View view) {
Student student = new Student("lili",20);
student.setId(3);
dbEngine.updateStudents(student);
}
public void queryAction(View view) {
dbEngine.queryStudents();
}
public void deleteAllAction(View view) {
dbEngine.deleteAllStudent();
}
}