ObjectBox使用记录

本文详细介绍了ObjectBox数据库的配置与使用方法,包括在Android项目中引入依赖、初始化数据库、进行增删查改操作及数据库升级流程。同时,提供了调试技巧和常见问题解决方案。

ObjectBox使用记录

学习链接: https://blog.youkuaiyun.com/vxiaocai/article/details/78711190

引入

1.project的gradle中修改:

buildscript {

repositories {
    google()
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/google' }
    maven { url 'http://maven.aliyun.com/nexus/content/groups/public/' }
    maven { url 'http://maven.aliyun.com/nexus/content/repositories/jcenter'}
}
dependencies {
    classpath 'com.android.tools.build:gradle:3.0.1'
    classpath "io.objectbox:objectbox-gradle-plugin:2.3.4"
}
}
  1. module或者app中引入,需要gradle中最后添加

    apply plugin: 'io.objectbox'

3.如果想要查看数据库。module或者app的gradle中添加

`dependencies {
	implementation fileTree(dir: 'libs', include: ['*.jar'])
	implementation 'com.android.support:appcompat-v7:28.0.0'
	implementation 'com.android.support.constraint:constraint-layout:1.1.3'
	testImplementation 'junit:junit:4.12'
	androidTestImplementation 'com.android.support.test:runner:1.0.2'
	androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
	/*为了电脑查看数据*/
	debugImplementation "io.objectbox:objectbox-android-objectbrowser:2.3.4"
	releaseImplementation "io.objectbox:objectbox-android:2.3.4"
}
apply plugin: 'io.objectbox'`

然后application初始化的时候需要打开调试:

`
private BoxStore boxStore;
private void initObjectBox() {
    //第一次没运行之前,MyObjectBox默认会有报错提示,可以忽略。创建实体类, make之后报错就会不提示
    boxStore = MyObjectBox.builder().androidContext(this).build();
    if (BuildConfig.DEBUG) {//开启浏览器访问ObjectBox
        boolean started = new AndroidObjectBrowser(boxStore).start(this);
        Log.i("ObjectBrowser", "Started: " + started);
    }
    DataManager.getInstance().init(this);//数据库统一操作管理类初始化
}

`

然后可打开链接: http://localhost:8090/index.html 查看

备注:如果访问不到那么程序安装后,打开命令行 输入以下命令 adb forward tcp:8090 tcp:8090

再次尝试打开链接

使用

数据库使用
  1. application初始化 BoxStore boxStore = MyObjectBox.builder().androidContext(this).build();
  2. 添加:boxStore.boxFor(NewUserEntity.class).put(对象实例);
  3. 查询:SqlKeyValue sqlKeyValue = beanBox.query().equal(SqlKeyValue_.sqlKey, key).build().findFirst();
  4. 删除:beanBox.query().equal(SqlKeyValue_.sqlKey, key).build().remove();
  5. 更改:先查询到对象,修改属性,再添加
数据库的升级
  1. 字段的添加或者减少。直接修改对象属性如添加public String code; 注意属性为public或者(provide需要set和get)
  2. 字段属性的修改。1.先添加@Uid,运行看报错如:error: [ObjectBox] UID operations for property "MyEntity.year": [Rename] apply the current UID using @Uid(6707341922395832766L) - [Change/reset] apply a new UID using @Uid(9204131405652381067L) 在字段前添加@Uid(9204131405652381067L)

3.对象修改:同字段属性修改
4.数据升级后,保留原数据。

问题记录

引入不成功

  1. 检查project和module中的gradle是否添加
  2. 定义@Entity对象
  3. rebuild project

数据升级后,保留原数据

  1. 添加、删除 对象字段=数据库字段;objectbox自动升级数据库并且保留数据
  2. 字段的属性修改需要添加@Uid,以前保存的字段:注意可能为null
### L1 范数盒约束优化 在最优化问题中,L1范数盒约束指的是变量不仅受到线性不等式的限制,还被限定在一个特定范围内。这类约束通常表示为: \[ \min_{x} f(x) \quad \text{subject to } \|x\|_1 \leq t, l_i \leq x_i \leq u_i \] 其中 \(f(x)\) 是目标函数,\(t\) 表示L1范数的最大允许值,而 \(l_i\) 和 \(u_i\) 则分别代表每个决策变量的上下界。 对于带有L1范数盒约束的问题,在实际应用中有多种方法可以解决。一种常见的策略是采用内点法或梯度投影算法来处理这些约束条件[^1]。另一种有效的方法是在求解过程中引入松弛变量,并通过调整惩罚参数逐步逼近最优解。 当涉及到具体实现时,像MATLAB这样的软件环境提供了丰富的工具箱支持此类计算需求。例如,`l1-magic` 工具箱能够用于求解基追踪 (BP) 及其变体——基追踪降噪 (BPDN)。如果要针对大规模数据集解决问题,则可能需要利用 `cgsolve.m` 函数来进行更高效的迭代求解过程。 ```matlab % 假设我们有一个简单的带L1范数盒约束的目标最小化问题 function [x_optimal, obj_value] = solve_l1_box_constrained_problem(A, b, lb, ub, lambda) % A: 系统矩阵; b: 观测向量; % lb,ub: 下限和上限边界数组; % lambda: 正则化系数 n = length(b); options = optimoptions('fmincon', 'Algorithm', 'interior-point'); nonlcon = @(x)deal([], sum(abs(x)) - lambda); % 定义非线性约束作为L1范数小于等于lambda x0 = zeros(n, 1); % 初始化猜测解 [x_optimal, obj_value] = fmincon(@(x)norm(A*x-b)^2/2, ... x0, [], [], [], [], lb, ub, nonlcon, options); end ``` 此代码片段展示了如何设置并调用 MATLAB 的内置优化器 `fmincon` 来寻找满足给定L1范数盒约束条件下使二次损失最小化的解决方案。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

feipengwang6666

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值