У меня есть проект iOS, и данные записываются в базу данных SQLite. Например, 'OBJECTROWID'
в таблице LDOCLINK
хранит информацию о связанном документе.Запросить базу данных SQLite для GUID в форме X'3D98F71F3CD9415BA978C010b1CEF941
OBJECTROWID
начинается с строки <3d98f71f 3cd9415b a978c010 b1cef941>
, но передается в (NSData *)
перед входом в базу данных. Фактическая обработка вставки базы данных была написана гораздо более опытным программистом, чем я. В любом случае, как показано на рисунке ниже, база данных отображает столбец OBJECTROWID
в форме X'3D98F71F3CD9415BA978C010b1CEF941'
. Я полный новичок с SQLite-запросами и не могу возвращать правильную строку, используя предложение WHERE
с OBJECTROWID =
или OBJECTROWID like
.
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 Manager).
Я также проверил this вопрос и this один, но я все еще не смог получить правильный запрос.
Пожалуйста, помогите мне вернуть правильную строку (на самом деле две строки в этом случае - первая и третья).
EDIT:
Код для записи в базу данных включает в себя множество классов. Метод, показанный ниже, я считаю основной частью сериализации (случай 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;
}
}
Post код, используемый для записи этих значений в базе данных.Это упростит объяснение того, как изменить процесс. – rmaddy
Схема может помочь: 'select * from sqlite_master, где name = 'LDOCLINK' и type = 'table';' –
@rmaddy. Благодарю. Я разместил некоторые, надеюсь, это поможет. –