Столкнулся со странной проблемой:
У меня есть столбец «MaxDealtDamage», который, например, ниже 1000000 (1000 тыс.). код такой:
class xyz = PlayerData.GetData(player);
xyz.LoginTimes++;
PlayerData.SetData(xyz, player);
Когда это 1000000 (1000k) или выше, эта ошибка отправляется:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '.000,
MaxDefense= 0 WHERE UUID='d839d1f0-ad5b-4922-841c-1d6ee05d9f56'' at line 1
Он ведет себя так, как будто пытается дать ему строку, содержащую «4.000.000», но это целое число со значением «4000000» (4000k). Чтобы убедиться, что вывод во время выполнения равен 4000000, я перепроверил его.
Здесь запрос:
MessageFormat.format("INSERT INTO PlayerData(
UUID,VIPExpirationDate,IPv4,FirstPlayTime,LastPlayTime,TotalPlayTime,TotalLogins,MaxDealtDamage,MaxDefense) " + "VALUES(''{0}'',''{1}'',''{2}'',''{3}'',''{4}'',{5},{6},{7},{8});", data.UUID.toString(), DBDateFormat.format(data.VIPExpirationDate), data.IPv4, DBDateFormat.format(data.FirstPlayTime), DBDateFormat.format(data.LastPlayTime), data.TotalPlayTime, data.TotalLogins, data.MaxDealtDamage, data.MaxDefense);




MessageFormat не является инструментом для создания операторов SQL. Это простая утилита для создания текстовых сообщений с правильным форматированием.
Вы должны использовать PreparedStatement с параметрами привязки, как описано в руководстве по Использование подготовленных операторов. JDBC позаботится об экранировании и форматировании предоставленных значений, чтобы они могли быть получены сервером базы данных, предотвращая при этом SQL-инъекции.
Спасибо за ответ, я должен был подумать о том, что MessageFormat предназначен только для построения текст.
Сработало очень хорошо, а работы еще меньше, спасибо! :)
@Quantum и безопасен, пожалуйста, прочитайте об атаке SQL Injection
Вы правы, потому что это также делает побег, насколько я читал.
Вопросы, требующие помощи в отладке («почему этот код не работает?»), должны включать желаемое поведение, конкретную проблему или ошибку и кратчайший код, необходимый для его воспроизведения в самом вопросе. Вопросы без четкой формулировки проблемы бесполезны для других читателей. См.: Как создать минимальный, полный и проверяемый пример.