形式的GUID我有一個iOS項目和數據寫入SQLite數據庫。例如,表中的LDOCLINK
存儲有關鏈接文檔的信息。查詢SQLite數據庫的形式X'3D98F71F3CD9415BA978C010b1CEF941
OBJECTROWID
以格式<3d98f71f 3cd9415b a978c010 b1cef941>
作爲字符串開始,但在輸入數據庫之前轉換爲(NSData *)
。數據庫插入的實際處理是由一位比我有經驗的程序員編寫的。無論如何,如下圖所示,數據庫以X'3D98F71F3CD9415BA978C010b1CEF941'
的形式顯示OBJECTROWID
列。我是一個有SQLite查詢的完全初學者,似乎無法通過使用OBJECTROWID =
或OBJECTROWID like
中的WHERE
子句返回正確的行。
SELECT * FROM LDOCLINK WHERE OBJECTROWID like '%';
給所有行(明顯),但我想在那裏OBJECTROWID
等於<3d98f71f 3cd9415b a978c010 b1cef941>
行。我曾嘗試以下,沒有他們的工作:
SELECT * FROM LDOCLINK WHERE OBJECTROWID = 'X''3d98f71f3cd9415ba978c010b1cef941'
沒有錯誤 - 我以爲我逃離了X後出現的單引號,但是這並不工作
SELECT * FROM LDOCLINK WHERE OBJECTROWID like '%<3d98f71f 3cd9415b a978c010 b1cef941>%'
我不能即使得到兩個相鄰字符的匹配,例如最初的3D
:
SELECT * FROM LDOCLINK WHERE OBJECTROWID like '%3d%'
沒有錯誤報告,但它不返回任何內容。
SELECT * FROM LDOCLINK WHERE OBJECTROWID like '%d%'
這是最奇怪的結果,因爲它只返回兩行,不包括我的<3d98f71f 3cd9415b a978c010 b1cef941>
,看似任意。
SELECT * FROM LDOCLINK WHERE OBJECTTYPE = '0'
返回這些相同的行,只是爲了說明接口工作(SQLite管理器)。
我也檢出this問題和this之一,但我仍然無法得到正確的查詢。
請幫助我返回正確的行(在這種情況下實際上是兩行 - 第一個和第三個)。
編輯:
寫入數據庫的代碼涉及許多類。下面顯示的方法是我認爲序列化的主要部分(案例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;
}
}
後使用這些值寫入數據庫的代碼。這將使解釋如何扭轉過程變得更容易。 – rmaddy
該模式可能有所幫助:'select * from sqlite_master where name ='LDOCLINK'and type ='table';' –
@rmaddy。謝謝。我發佈了一些,我希望它會有所幫助。 –