При попытке сохранить в таблице Oracle SQL строку из более чем 100 символов, в то время как ограничение поля - 1000 байт, которое я понял, составляет ~ 1000 английских символов, я выхожу допустимые границы, за исключением:VARCHAR2 (1000) ограничено только 100 символами
StringIndexOutOfBoundsException: String index out of range: -3
Что может быть причиной такого низкого ограничения?
Спасибо!
EDIT:
код, где происходит ошибка (см chat):
// Commenting the existing code, because for sensitive information
// toString returns masked data
int nullSize = 5;
int i = 0;
// removing '[' and ']', signs and fields with 'null' value and also add
// ';' as delimiter.
while (i != -1) {
int index1 = str.indexOf('[', i);
int index2 = str.indexOf(']', i + 1);
i = index2;
if (index2 != -1 && index1 != -1) {
int index3 = str.indexOf('=', index1);
if (index3 + nullSize > str.length() || !str.substring(index3 + 1, index3 + nullSize).equals("null")) {
String str1 = str.substring(index1 + 1, index2);
concatStrings = concatStrings.append(str1);
concatStrings = concatStrings.append(";");
}
}
}
Поделитесь тем, что вы используете, чтобы вставить эту строку в таблицу Oracle, поскольку эта ошибка связана с индексированием в строку, а не с усечением данных из-за того, что она вставлена в столбец с типом данных, который слишком мал для представления ваших данных. Не только это, но и ограничения полей в 1000 байт не обязательно означают 1000 символов, поскольку это зависит от кодировки символов. –
@JonathonOgden: на данный момент не было доступа к вставленному запросу, но если кодировка UTF-8, будет ли это ограничение, равное только 100 английским символам под 1000Bytes? – Batman
Как вы получаете это исключение? Что вы делаете именно так? –