java - Android RoomDB 自定义更新查询给出 android.database.sqlite.SQLiteConstraintException: NOT NULL 约束失败:
问题描述
当我尝试使用两个字符串参数运行 updateAlarmTriggered Query 时,出现以下错误:
日志输出
E/SQLiteLog: (1299) abort at 33 in [UPDATE alarmTable SET triggered = 1 AND triggerTime = ? WHERE date = ?]: NOT NULL constraint failed: alarmTable.triggered
android.database.sqlite.SQLiteConstraintException: NOT NULL constraint failed: alarmTable.triggered (code 1299)
这是我的道和实体类:
AlarmDao.java
@Query("UPDATE alarmTable SET triggered = 1 AND triggerTime = :triggerTime WHERE date = :alarmDate")
void updateAlarmTriggered(String alarmDate, String triggerTime);
AlarmEntity.java
@PrimaryKey
@NonNull
private String date;
@NonNull
private int triggered;
@Nullable
private String triggerTime;
@NonNull
public String getDate() {return date; }
public void setDate(@NonNull String date) {this.date = date; }
@NonNull
public int getTriggered() {return triggered; }
public void setTriggered(@NonNull int triggered) { this.triggered =triggered; }
我用以下方法初始化新实体:
@Insert
void insertAlarm(AlarmEntity alarmEntity);
还有alarmEntity对象我:
AlarmEntity newAlarm = new AlarmEntity();
newAlarm.setDate(time.substring(4,20) + time.substring(30,34));
newAlarm.setTriggered(0);
newAlarm.setDeleted(0);
我无法弄清楚为什么NOT NULL 约束在 alarmTable.triggered 上失败的原因,因为这就是我在 updateQuery 中将其设置为 1 的原因。
解决方案
要更新多个列,请使用逗号,
分隔列。喜欢以下
@Query("UPDATE alarmTable SET triggered = 1, triggerTime = :triggerTime WHERE date = :alarmDate")
void updateAlarmTriggered(String alarmDate, String triggerTime);
推荐阅读
- python-3.x - 打开运行另一个线程的第二个响应框架
- cryptocurrency - Uniswap V3 关于价格范围和掉期细节
- android - 如何从firebase实时数据库中对附近用户的帖子进行排序?
- php - 我想在 laravel 中使用 ajax 替换输入值
- android - 如何在 Android Studio 中配置 SDK
- ios - 获取当前连接到我的 iPhone 的设备列表
- opencl - 使用 hashcat 时如何修复“使用 openCL 构建失败错误”
- lua - 元方法的问题
- regex - Powershell 正则表达式的所有匹配问题和字符串之间的全部查找
- python - Z[...] 在 python 中是什么意思?(Z 是一个数组)