iOS プロジェクトがあり、データは SQLite データベースに書き込まれます。たとえば、リンクされたドキュメントに関する情報を 'OBJECTROWID'
テーブルに格納します。LDOCLINK
OBJECTROWID
形式の文字列として始まりますが、データベースに入力される前に<3d98f71f 3cd9415b a978c010 b1cef941>
キャストされます。(NSData *)
データベース挿入の実際の処理は、私よりもはるかに経験豊富なプログラマーによって作成されました。とにかく、下の画像が示すように、データベースはOBJECTROWID
列をフォームに表示しますX'3D98F71F3CD9415BA978C010b1CEF941'
。私は SQLite クエリの完全な初心者であり、 orWHERE
句を使用して正しい行を返すことができないようです。OBJECTROWID =
OBJECTROWID like
SELECT * FROM LDOCLINK WHERE OBJECTROWID like '%';
(明らかに)すべての行を提供しますが、OBJECTROWID
equalsの行が必要です<3d98f71f 3cd9415b a978c010 b1cef941>
。次のことを試しましたが、どれも機能しません。
SELECT * FROM LDOCLINK WHERE OBJECTROWID = 'X''3d98f71f3cd9415ba978c010b1cef941'
エラーはありません - X の後に表示される一重引用符をエスケープしていると思っていましたが、これは機能しませんでした
SELECT * FROM LDOCLINK WHERE OBJECTROWID like '%<3d98f71f 3cd9415b a978c010 b1cef941>%'
頭文字などの 2 つの隣接する文字の一致さえ取得できません3D
。
SELECT * FROM LDOCLINK WHERE OBJECTROWID like '%3d%'
エラーは報告されませんが、何も返されません。
SELECT * FROM LDOCLINK WHERE OBJECTROWID like '%d%'
これは、 my を含まない 2 つの行のみを返すため<3d98f71f 3cd9415b a978c010 b1cef941>
、一見恣意的に見えるため、最も奇妙な結果です。
SELECT * FROM LDOCLINK WHERE OBJECTTYPE = '0'
インターフェイスが機能することを示すために、これらと同じ行を返します (SQLite Manager)。
this question とthis oneもチェックアウトしましたが、まだ正しいクエリを取得できませんでした。
正しい行を返すのを手伝ってください (この場合、実際には 2 行 - 1 番目と 3 番目)。
編集:
データベースに書き込むコードには、多くのクラスが含まれます。以下に示す方法が、連載のメイン部分だと思います(ケース8)。
-(void)serializeValue:(NSObject*)value ToBuffer:(NSMutableData*)buffer
{
switch (self.propertyTypeID) {
case 0:
{
SInt32 length = 0;
if ( (NSString*)value )
{
/*
NSData* data = [((NSString*)value) dataUsingEncoding:NSUnicodeStringEncoding];
// first 2 bytes are unicode prefix
length = data.length - 2;
[buffer appendBytes:&length length:sizeof(SInt32)];
if ( length > 0 )
[buffer appendBytes:([data bytes]+2) length:length];
*/
NSData* data = [((NSString*)value) dataUsingEncoding:NSUTF8StringEncoding];
length = data.length;
[buffer appendBytes:&length length:sizeof(SInt32)];
if ( length > 0 )
[buffer appendBytes:([data bytes]) length:length];
}
else
[buffer appendBytes:&length length:sizeof(SInt32)];
}
break;
//depends on the realisation of DB serialisation
case 1:
{
Byte b = 0;
if ( (NSNumber*)value )
b = [(NSNumber*)value boolValue] ? 1 : 0;
[buffer appendBytes:&b length:1];
}
break;
//........
case 8:
{
int length = 16;
[buffer appendBytes:[(NSData*)value bytes] length:length];
}
break;
default:
break;
}
}