日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > Android >内容正文

Android

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

發布時間:2023/12/15 Android 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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。因此,主鍵約束將在同步服務插入時失敗,因此此解決方案不適用于主鍵!

總結

以上是生活随笔為你收集整理的android 数据库 字节数组,Android上的GreenDAO:字节数组作为主键/构建包含字节数组属性Where子句的查询...的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。