数据库介绍:
相关链接:框架主页 文档介绍
开始
在项目中引入框架:
- 在项目的build.gradle引入:
dependencies {
classpath "com.android.tools.build:gradle:7.0.2"
classpath("io.objectbox:objectbox-gradle-plugin:3.5.1")
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
2.在app的build.gradle模块引入:
dependencies {
implementation 'androidx.appcompat:appcompat:1.2.0'
implementation 'com.google.android.material:material:1.3.0'
implementation 'androidx.constraintlayout:constraintlayout:2.0.4'
testImplementation 'junit:junit:4.+'
androidTestImplementation 'androidx.test.ext:junit:1.1.2'
androidTestImplementation 'androidx.test.espresso:espresso-core:3.3.0'
//可如果不需要浏览器调试内容可以不添加
debugImplementation "io.objectbox:objectbox-android-objectbrowser:3.5.1"
releaseImplementation "io.objectbox:objectbox-android:3.5.1"
}
//如果没有加入浏览器调试功能 将此选项填写在build.gradle开头的位置与id 'com.android.application'在一起
apply plugin: 'io.objectbox'
简单使用
-
创建表
前言:官方的注解很强大 此实例只演示简单的注解使用,具体注解请参照 注解文档
//此注释可以将实体类设置为表名,支持自定义表名 可查询官方文档
@Entity
public class Song {
//此为表id属性 必须有 默认不可修改切为long型自增字段,官方有支持修改的方法
@Id
public long id;
public String songName;
private String title;
private String artist;
private String album;
private String uri;
private String iconUri;
private int duration;
public long getId() {
return id;
}
public void setId(long id) {
this.id = id;
}
public String getSongName() {
return songName;
}
public void setSongName(String songName) {
this.songName = songName;
}
public String getTitle() {
return title;
}
public void setTitle(String title) {
this.title = title;
}
public String getArtist() {
return artist;
}
public void setArtist(String artist) {
this.artist = artist;
}
public String getAlbum() {
return album;
}
public void setAlbum(String album) {
this.album = album;
}
public String getUri() {
return uri;
}
public void setUri(String uri) {
this.uri = uri;
}
public String getIconUri() {
return iconUri;
}
public void setIconUri(String iconUri) {
this.iconUri = iconUri;
}
public int getDuration() {
return duration;
}
public void setDuration(int duration) {
this.duration = duration;
}
}
- 初始化
public class ObjectBox {
private static BoxStore boxStore;
public static void init(Context context) {
boxStore = MyObjectBox.builder()
.androidContext(context.getApplicationContext())
.build();
//没有引入浏览器调试的不需要加,可根据debug模式自行加入判断开启调试
new Admin(boxStore).start(context);
}
public static BoxStore get() {
return boxStore;
}
}
在app中初始化
public class Myapp extends Application {
@Override
public void onCreate() {
super.onCreate();
ObjectBox.init(this);
}
}
rebuild项目即可自动生成对应代码
增删改查:
public class MainActivity extends AppCompatActivity {
ActivityMainBinding mainBinding;
Box<Song> songBox;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
mainBinding = ActivityMainBinding.inflate(getLayoutInflater());
setContentView(mainBinding.getRoot());
songBox = ObjectBox.get().boxFor(Song.class);
mainBinding.button.setOnClickListener(v -> {
// 增 改是一个方法
for (int i = 0; i < 30000; i++) {
Song song = new Song();
song.setAlbum("刹石狩" + i);
song.setArtist("张三");
song.setDuration(i);
song.setIconUri("http:/s" + i);
song.setTitle("ssss" + i);
song.setSongName("离死" + i);
songBox.put(song);
}
});
mainBinding.button2.setOnClickListener(v -> {
//删
songBox.removeAll();
//根据id删除
// songBox.remove(123455);
});
mainBinding.button3.setOnClickListener(v -> {
//查
Query<Song> query = songBox.query(Song_.songName.equal("张三")).build();
List<Song> songs = query.find();
//可重复使用,但一定记得关闭防止泄露
query.close();
});
mainBinding.button4.setOnClickListener(v -> {
});
}
}
2.升级数据库
数据库的升级是自动的,无需配置版本号,这里讲一下修改表里的字段名同样先附上官方链接 修改字段名 里面包含了修改表名及字段名类型的方法
首先在你需要的字段名上添加注解:
@Uid()
private String title;
rebuild项目项目可得到类似的报错信息:
error: [ObjectBox] UID operations for entity "title":
[Rename] apply the current UID using @Uid(6645479796472661392L)
主要就是获得 @Uid(6645479796472661392L)
把获得的值复制到修改的字段名注解上并修改字段名:
@Uid(6645479796472661392L)
private String titles;
rebuild项目运行即可,数据会的得到保留 其他修改方式大同小异,可查看官方文档学习
在浏览器中调试
保证加入了调试依赖并初始化后,使用命令:
adb forward tcp:8090 tcp:8090
然后在浏览器中输入链接 http://localhost:8090/ 即可访问 不过只能看 不能修改