1、主要参考自:https://b23.tv/9P0Nrd
2、内容如果有不对的,希望可以指出或补充。
3、新知识。
对象关系映射(Object Relational Mapping,简称ORM):
是通过使用描述对象和数据库之间映射
(对应关系,如类与表就是类的成员变量和表的列一 一对应,对象与表的行一 一对应)的元数据,将面向对象语言程序中的对象自动持久化到关系数据库中。本质就是将数据从一种形式转换到另一种形式。
常用的ORM框架(基于以上概念):
OrmLite(简单)、SugarORM、GreenDAO(高效)、Active Android、Realm。前面三种都是用Java语言编写的,最后一种是C语言。不同点在于它们各自的侧重点不一样。
步骤(括号二到三的总体步骤):引入依赖→定义Person类→定义表与对象的对应关系→表存于数据库,创建(由关系生成)表→Dao对象
1、依赖(释:5.0版本的,不是最新版的):
将 implementation ‘com.j256.ormlite:ormlite-android:5.0’ 放入如下位置。
2、定义数据库与表的关系:
① 示列
新建一个类(Person.java),编写如下。
package com.example.testormlite;
import com.j256.ormlite.field.DatabaseField;
import com.j256.ormlite.table.DatabaseTable;
// 将Person类与person表建立对应关系,也就是映射
//创建了一个名为person的表
@DatabaseTable(tableName = "person")
public class Person {
//将成员变量与表的列对应(一 一对应)
//generatedId = true表示定义成主键
// 一般id(字段名)都自定义
@DatabaseField(columnName = "id",generatedId = true)
public Integer id;
@DatabaseField(columnName = "name")
public String name;
@DatabaseField(columnName = "age")
public Integer age;
//必须要有个无参构造方法(Ormlite)
public Person() {
}
public Person(Integer id, String name, Integer age) {
this.id = id;
this.name = name;
this.age = age;
}
//方便打印对象的成员变量
@Override
public String toString() {
return "Person{" +
"id=" + id +
", name='" + name + '\'' +
", age=" + age +
'}';
}
}
① 实现增删改查
在MainActivity.java中,编写如下。
package com.example.testormlite;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Context;
import android.database.sqlite.SQLiteDatabase;
import android.os.Bundle;
import com.j256.ormlite.android.apptools.OrmLiteSqliteOpenHelper;
import com.j256.ormlite.dao.Dao;
import com.j256.ormlite.support.ConnectionSource;
import com.j256.ormlite.table.TableUtils;
import java.sql.SQLException;
import java.util.List;
public class MainActivity extends AppCompatActivity {
//表必须在数据库中,表必须创建才能用
//再定义一个类
//数据库
class Test extends OrmLiteSqliteOpenHelper {
public Test(Context context) {
//参数1:上下文,参数2:数据库名。(重点)
// 参数3:工厂(不用管),参数4:版本
super(context, "test.db", null, 1);
}
@Override
public void onCreate(SQLiteDatabase database, ConnectionSource connectionSource) {
//在test.db数据库创建成功后,创建表(以便将对象存到表中,或将表中数据赋值给对象)
try {
//根据类上的对应关系生成表(实现表必须在数据库中) 联系
TableUtils.createTable(connectionSource, Person.class);
} catch (SQLException throwables) {
throwables.printStackTrace();
}
}
@Override
public void onUpgrade(SQLiteDatabase database, ConnectionSource connectionSource,
int oldVersion, int newVersion) {
}
}
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
//定义对象,一个对象对应表的一行
Person person1 = new Person(null,"luck",0);
Person person2 = new Person(null,"ch09",0);
Test test = new Test(this);
//获取一个具有增删改查方法的对象,叫做Dao对象
try {
//<类,id类型>
Dao<Person,Integer> dao = test.getDao(Person.class);
//增加数据
dao.create(person1);
dao.create(person2);
//删除
dao.deleteById(2);
//修改数据 先查->改值->存到数据库->更新到数据库
Person p = dao.queryForId(1);
p.name = "luck_ch09";
dao.update(p);
//查看数据 所有all
List<Person> personDatas = dao.queryForAll();
System.out.println("查询到的结果数据为:"+personDatas);
} catch (SQLException e) {
e.printStackTrace();
}
}
}
② 结果展示
注:因为运行了多次(在第一次增加数据后没注意到注释掉),所以表中的数据也增加了多次。
明天继续
1、ormlite官网
2、OrmLite数据库使用
3、数据访问对象(Data Access Object,简称DAO):是一个面向对象的数据库接口。适用于单系统应用程序或小范围本地分布使用。