Could not store char base data

Статус
В этой теме нельзя размещать новые ответы.

Eternal12

Знаменитый
Участник
Сообщения
66
Розыгрыши
0
Репутация
1
Реакции
14
Баллы
1 260
Хроники
  1. The 2nd Throne: Gracia
Исходники
Присутствуют
Сборка
l2open
Приветствую. Суть проблемы такова. При создании/ входе на чара появляется в одной и той же локации, не сохраняет изменения и при следующем перезаходе высвечивается ошибка.

Код:
com.l2open.gameserver.model.actor.L2Character    Could not store char base data: java.sql.SQLException: Parameter index out of range (55 > number of parameters, which is 54).

Раньше исправлял такую аналогичную ошибку с забугорного форума. Но найти теперь фикс не могу.
Подскажите куда копать, голову уже сломал.
 
Решение
У вас в L2PcInstance есть метод storeCharBase, который сохраняет состояние чара в базу, выполня SQL запрос из стринговой константы UPDATE_CHARACTER.
Так вот, если вы посмотрите на зпрос там есть плейсхолдеры (знаки вопросов) для параметров curHp=?,maxCp=?..., а в методе storeCharBase есть вызовы методов для PreparedStatement
Код:
statement.setDouble(3, getCurrentHp());
statement.setInt(4, getMaxCp());
Это установка параметра по индексу вхождения плейсхолдера в строке запроса, которые при выполнени запроса заменяются на значения
Теперь посмотрите какой индекс для параметра в storeCharBase у вас последний? Например у меня 61, т.е количество плейсхолдеров в запросе так же должно быть 61, а если я попытаюсь установить 62-ой...
У вас в L2PcInstance есть метод storeCharBase, который сохраняет состояние чара в базу, выполня SQL запрос из стринговой константы UPDATE_CHARACTER.
Так вот, если вы посмотрите на зпрос там есть плейсхолдеры (знаки вопросов) для параметров curHp=?,maxCp=?..., а в методе storeCharBase есть вызовы методов для PreparedStatement
Код:
statement.setDouble(3, getCurrentHp());
statement.setInt(4, getMaxCp());
Это установка параметра по индексу вхождения плейсхолдера в строке запроса, которые при выполнени запроса заменяются на значения
Теперь посмотрите какой индекс для параметра в storeCharBase у вас последний? Например у меня 61, т.е количество плейсхолдеров в запросе так же должно быть 61, а если я попытаюсь установить 62-ой параметр получу такую же ошибку как у вас
Ну и самое главное, почему эта ошибка возникает? Потому что либо вы либо кто-то другой изменил код L2PcInstance так, что storeCharBase пытается установить больше параметров чем есть в вашем UPDATE_CHARACTER запросе.
Как поправить? Исправить ваш SQL запрос либо удалить установку лишних параметров в storeCharBase
 
Решение
У вас в L2PcInstance есть метод storeCharBase, который сохраняет состояние чара в базу, выполня SQL запрос из стринговой константы UPDATE_CHARACTER.
Так вот, если вы посмотрите на зпрос там есть плейсхолдеры (знаки вопросов) для параметров curHp=?,maxCp=?..., а в методе storeCharBase есть вызовы методов для PreparedStatement
Код:
statement.setDouble(3, getCurrentHp());
statement.setInt(4, getMaxCp());
Это установка параметра по индексу вхождения плейсхолдера в строке запроса, которые при выполнени запроса заменяются на значения
Теперь посмотрите какой индекс для параметра в storeCharBase у вас последний? Например у меня 61, т.е количество плейсхолдеров в запросе так же должно быть 61, а если я попытаюсь установить 62-ой параметр получу такую же ошибку как у вас
Ну и самое главное, почему эта ошибка возникает? Потому что либо вы либо кто-то другой изменил код L2PcInstance так, что storeCharBase пытается установить больше параметров чем есть в вашем UPDATE_CHARACTER запросе.
Как поправить? Исправить ваш SQL запрос либо удалить установку лишних параметров в storeCharBase
Спасибо Разобрался, забыл L2PcInstance удалить доп параметры через которые пытался отловить состояния для действий . Как только их удалил ошибки указали на ConfigRestriction.java который тоже редактировал до этого. Про плейсхолдеры знал и подсчитывал. Тупо запамятовал что нужно было восcтановить не только AdminEdit/ CustomSQLs
 
Статус
В этой теме нельзя размещать новые ответы.

Похожие темы

Ответы
9
Просмотры
378
Назад
Сверху