バイト[] WHERE句を使用したSQLiteクエリ

AndroidのSQLiteデータベースの観点からは、BLOB型のフィールドを持つテーブルがあり、このBLOBフィールドに基づいてこのテーブルの内容を照会したいと考えています。

ContentValues を使用してBLOBフィールドを挿入し、それを使用して取得できます。

cursor.getBlob(0)// index

私はちょうどこのBLOBフィールドに基づいてこのテーブルの内容を照会する方法を見つけることができず、この問題については何も見つかりませんでした。

1

2 答え

blobの(テキストのバイナリ、その他の)内容を照会することはできません。

あなたが見ると、内容は16進数で表示されます:

例:X'53514C697465 '。

提案:

新しいテキスト列を作成します(例: "blob_index"あなたは "インデックス"の列を検索し、次にブロブをフェッチすることができます。

あるいは、データを「テキスト」として保存するだけです。

2
追加された

私はあなたがブロブで照会することができることが分かった。クエリでhex()関数を使用する必要があります。

たとえば、データベースの行にUUIDをユニークなキーとして使用していますが、これをローカルで生成しても、サーバー上の一意性を確認することができます。

  CREATE TABLEの例(_ID INTEGER PRIMARY KEY AUTOINCREMENT、
                      uuid BLOB NON NULL UNIQUE、
                      ...)
 

データを挿入するときは、次のように動作します。

 最終的なContentValues値=新しいContentValues(4);
values.put(Contract.Line.COL_UUID、
           UuidFactory.toBlob(uuid));
 

次の形式のクエリURIを指定します。

  content://package.example.com/example/uuid/11112222-3333-0444-0555-666677778888
 

クエリは次のようになります。

 最終SQLiteDatabase db = mHelper.getReadableDatabase();
db.queryを返す(テーブル、投影、
                "hex(uuid)=?"、
                新しいString [] {UuidFactory.toHex(uri.getLastPathSegment())}、
                null、null、null、null);
 

次の静的関数は、 UuidFactory (新しいUUIDを生成するコードも含まれています)で定義されています。

  @NonNull
public static String toHex(@NonNull final UUID uuid){
    return String.format( "%016X%016X"、
                        uuid.getMostSignificantBits()、
                        uuid.getLeastSignificantBits());
}

@NonNull
public static String toHex(@NonNull final String uuid){
    toHex(UUID.fromString(uuid));に戻ります。
}

@NonNull
public static byte [] toBlob(@NonNull final UUID uuid){
    最終的なByteBuffer buf = ByteBuffer.allocate(16);
    buf.putLong(uuid.getMostSignificantBits());
    buf.putLong(uuid.getLeastSignificantBits());
    戻り値buf.array();
}
 

完全性のために:

  @NonNull
public static UUID fromBlob(@NonNull final byte [] array){
    最終的なByteBuffer buf = ByteBuffer.allocate(16);
    buf.mark();
    buf.put(配列);
    buf.reset();
    最終的に長いmsb = buf.getLong();
    最終的な長さlsb = buf.getLong();
    新しいUUID(msb、lsb)を返します。
}
 
0
追加された