android 数据库 字节数组,Android上的GreenDAO:字节数组作为主键/构建包含字节数组属性Where子句的查询...

关于字节[]又名在greendao BLOB:

看着de.greenrobot.dao.query.WhereCondition.PropertyCondition.checkValueForType条件01目前不支持,因为如果值的类型为byte[],以下几行将始终引发异常。

if (value != null && value.getClass().isArray()) {

throw new DaoException("Illegal value: found array, but simple object required");

}

解决方案1 ​​ - 修改并有助于greendao:

您可以修改UPER线,使异常仅抛出,如果值的类型与属性的类型不适合。

if (value != null) {

if (value.getClass().isArray() && !property.type.isArray()) {

throw new DaoException("Illegal value: found array, but " +

"simple object required");

}

if (!value.getClass().isArray() && property.type.isArray()) {

throw new DaoException("Illegal value: found simple object, " +

"but array required");

}

}

也许这将已经解决的问题,但有可能是其他地区greendao停止与此编辑工作或将打破查询。例如,参数与查询的绑定可能不适用于数组。

Solutinon 2 - 使用queryRaw(String where, String... selectionArg)

这是非常简单的,不应该与有关SQLite的一些认识问题。

解决方案3 - 使用查找表

假设原始表:

ORIG

-------------------------------

UUID BLOB

...

可以修改ORIG并添加一个自动增量-的PrimaryKey:

db.execSQL("ALTER TABLE 'ORIG' " +

"ADD COLUMN 'REF_ID' INT PRIMARYKEY AUTOINCREMENT;");

同步服务应该已经关注ORIG.UUID的独特性并忽略新的ORIG.REF_ID -column。为了插入新的UUID,同步服务可能会使用INSERT在ORIG.REF_ID中导致新的自动增量值。 对于更新现有的UUID,同步服务可能会使用UPDATE ... WHERE UUID=?,并且不会创建任何新的ORIG.REF_ID值,但旧值将保留。

总结了ORIG -table在列REF_ID和列UUID之间有一个新的双射。

现在,您可以创建另一个表:

ORIG_IDX

------------------------------

UUID TEXT PRIMARYKEY

REF_ID INT UNIQUE

(如果你的数据是小于8个字节,也将适用于一个INT代替TEXT,但我不知道是否有一个内置的从BLOB到INT。)

ORIG.IDX.UUID将是字符串表示ORIG.UUID。 ORIG_IDX.REF_ID是ORIG.REF_ID的外键。

ORIG_IDX填充和更新触发器:

db.execSQL("CREATE TRIGGER T_ORIG_AI AFTER INSERT ON 'ORIG' BEGIN " +

"INSERT 'ORIG_IDX' SET 'REF_ID' = NEW.REF_ID, 'UUID' = NEW.UUID" +

"END;");

创建相应的触发器,UPDATE和DELETE。

可以使用greendao创建表ORIG和ORIG_IDX然后查询请求的UUID与:

public Orig getOrig(String uuid) {

OrigIdx origIdx = OrigIdxDao.queryBuilder().where(

QrigIdxDao.Properties.UUID.eq(uuid)).unique();

if (origIdx != null) {

return origIdx.getOrig();

}

return null;

}

我觉得字符串的PrimaryKey尚不支持,所以dao.load(uuid)将不可用。

CONCERING AN扩展表:

你可以使用一个string的PrimaryKey列,并提供在实体的保部分转换的方法。在插入之前,您将必须计算主键列。

如果还有其他工具插入数据(例如您的同步服务),您必须在插入前使用触发器计算您的主键。这似乎不可能使用SQLite。因此,主键约束将在同步服务插入时失败,因此此解决方案不适用于主键!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/245238.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

艾为数字ic面试题_每日学习:数字后端面试100问(2019全新版)

关注并标星大同学吧每天1次,打卡学习积累1个新知识,增1分职场底气作者称谓:Tao涛个人介绍:摸爬滚打多年的数字后端工程师微信公众号:数字后端IC芯片设计半导体知识分享第29期技能升级,从这里开始最近项目刚…

not null primary key什么意思_explain都不会用,你还好意思说精通Mysql查询优化?

Explain简介Explain关键字是Mysql中sql优化的常用「关键字」,通常都会使用Explain来「查看sql的执行计划,而不用执行sql」,从而快速的找出sql的问题所在。在讲解Explain之前首先创建需要的「用户表user、角色表role、以及用户角色关系表role_…

android 如何修改百度导航诱导界面,Android 百度导航SDK

1)AndroidManifest.xml增加权限,声明service和ak鉴权android:allowBackup"true"android:icon"mipmap/ic_launcher"android:label"string/app_name"android:roundIcon"mipmap/ic_launcher_round"android:supportsRtl"true"an…

飞桨模型保存_飞桨实战笔记:自编写模型如何在服务器和移动端部署

​作为深度学习小白一枚,从一开始摸索如何使用深度学习框架,怎么让脚本跑起来,到现在开始逐步读懂论文,看懂模型的网络结构,按照飞桨官方文档进行各种模型训练和部署,整个过程遇到了无数问题。非常感谢飞桨…

docker always_Ubuntu+Docker+STF环境搭建

Ubuntu提前先安装配置好 Ubuntu server 14.04.5参考资料:Ubuntu 16.04 Server 版安装过程图文详解Dcoker安装Ubuntu 14.04/16.04 (使用apt-get进行安装)安装最新版本# step 1: 安装必要的一些系统工具安装指定版本# 安装指定版本的Docker-CE:安装校验rootubuntu:/ho…

android使用桢布局,Android 常用布局

Android的布局有:LinearLayout线性布局RelativeLayout 相对布局FrameLayout单桢布局TableLayout表格布局GridLayout网格布局Android4.0AbsoluteLayout绝对布局不常用(淘汰)LinearLayout线性布局:LinearLayout是一种线型的布局方式。LinearLay…

导入obj_3D模型obj文件格式详解

3d打印机导入三维模型通常都是obj格式,下面我们来看一下这种文件的格式。为我们进行产品开发提供技术基础储备。obj格式有4种数据,分别以一下字母开头:v顶点vt纹理坐标vn顶点法向量f 面一、顶点格式:v x y z意义:每个顶…

import java.io 包下载_Go 包管理机制深入分析

前言随着 Go 语言的深入使用,其依赖管理机制也一直是各位 Gopher 热衷于探讨的话题。Go 语言的源码依赖可通过 go get 命令来获取,但自动化程度不高,于是官方提供了 Dep 这样的自动化批量管理依赖的工具。虽然 Go 语言的依赖管理在很多方面还…

android进出动画有白屏,Android启动白屏原因及解决方案

如果大家碰到了这个问题,相信刚开始大家都是很委屈的吧,心里想:我什么都没干啊,就写了个setContentView就要背锅了?如果已经遇到了,不要方,这里给大家提供几个解决方案,我们APP在启动…

jenkins 插件目录_三十二张图告诉你如何用Jenkins构建SpringBoot

目录前言如何安装Jenkins?环境准备开始安装Jenkins初始化配置访问首页输入管理员密码安装插件创建管理员实例配置配置完成构建Spring Boot 项目配置JDK、maven、Git环境安装插件添加 SSH Server添加凭据新建Maven项目构建任务如何构建托管在GitLab的项目&#xff1f…

android+rom+bootloader+flash,Android ROM开发(4) bootloader 三种启动模式

Andrew Huang 转载请注明作者及网址HTC手机中用的bootloader称为HBoot,不知道是不是HTC Bootloader 之意,从官网的源码看这个bootloader不象是u-boot的改版。(当然这个也不太确定HBOOT就是完全使用与Android相同的源码)在Android 的刷机时,经常会听到SPL…

filter过滤后重新添加_每天记一个单词(第3518)filter

filter /ˈfɪltər/ n. 过滤器;点击音频收听跟读 ↓↓↓↓↓↓(中慢速带读)(音频不显示请关闭头条app后台重新打开或者更新最新版本)英英解释:something that you pass water, air etc through in order to remove unwanted substances and make it clean or suita…

openwrt dhcp 无法获取ip_如何安装Openwrt软路由系统并配置正常使用

本篇文章教大家如何安装Openwrt软路由系统并配置正常使用。首先我们需要能用来当作软路由的主板,主板要至少需要2个千兆网口,一个用作Wan,其他用作Lan.我这边用到的是ASUS-N3050I-CM-A,这块主板拥有两个千兆网口,搭载了功耗仅6w的n3050 CPU,非…

android 低功耗蓝牙,Android 低功耗(BLE)蓝牙开发说明

BLE(Bluetooth Low Energy)低功耗蓝牙兴起的原因BLE蓝牙的兴起主要是因为可穿戴设备的流行,由于传统蓝牙不能满足可穿戴设备的续航要求,因此大部分可穿戴设备采用蓝牙4.0技术,即BLE蓝牙技术。BLE的特点快速搜索、快速连接、超低功耗连接和数据…

android opencv 获取小图在大图的坐标_Android开发—基于OpenCV实现相机实时图像识别跟踪...

利用OpenCV实现实时图像识别和图像跟踪图像识别什么是图像识别图像识别,是指利用计算机对图像进行处理、分析和理解,以识别各种不同模式的目标和对像的技术。根据观测到的图像,对其中的物体分辨其类别,做出有意义的判断。利用现代…

三菱a系列motion软体_三菱M70A/64SM重要功能比较

三菱M70A/64SM重要功能比较M70A特有功能,64SM无法作到的功能往 期 精 选 1>三菱M70系统全清操作步骤2>三菱M70系统 程序传输操作步骤3>三菱M70分中对刀操作步骤4>三菱M70设置加工条件选择 介绍5>三菱M70系统 原点设定方法6>三菱M70/M700 用户参数…

手机网页转换为html文件,怎么在手机上打开HTML文件

回答:一1、我们打开XMind软件2、点击插入----超链接3、我们输入我们的网址二使用二:XMind如何分享,XMind提供非常强大的共享功能,而且在不断完善,那么大家知道XMind如何分享吗?其实操作还是简单的。1、我们…

centos 卸载_CentOS「linux」学习笔记12:磁盘管理、分区挂载卸载操作

linux基础操作:主要介绍了磁盘管理、分区挂载卸载操作。特别说明linux中磁盘表现形式:IDE硬盘在linux中表示方式为"hdx"。SCSI硬盘在linux中表示方式为"sdx"。这里的x代表磁盘号[a代表基本主磁盘(主盘)对应数字表示:1,b代…

html制作翻页效果代码,使用原生JS实现滚轮翻页效果的示例代码

一、滚轮事件当用户通过鼠标滚轮与页面交互、在垂直方向上滚动页面时,就会触发mousewheel事件,这个事件就是实现全屏切换效果需要用到的。在IE6, IE7, IE8, Opera 10, Safari 5中,都提供了 “mousewheel” 事件,而 Firefox 3.5 中…

python leetcode_Leetcode 常用算法 Python 模板

小 trickoverlap条件&#xff1a;start1 < end2 and end1 > start2 在DFS中我们说关键点是递归以及回溯&#xff0c;在BFS中&#xff0c;关键点则是状态的选取和标记树算法Binary Indexed Tree BIT 树状数组class BIT:def __init__(self, n):self.n n 1self.sums [0] …