我遇到了一个奇怪的问题:
我有一列“ MaxDealtDamage”,例如低于1000000(1000k)。 代码是这样的:
class xyz = PlayerData.GetData(player);
xyz.LoginTimes++;
PlayerData.SetData(xyz, player);
当它是1000000(1000k)或更高时,此错误是由于bee发送:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;请查看与您的MariaDB服务器版本相对应的手册,以在'.000,
MaxDefense
= 0 WHERE UUID ='d839d1f0-ad5b-4922-841c-1d6ee05d9f56'附近使用正确的语法
它的行为就像是尝试给他一个包含“ 4.000.000”的字符串,但它是一个值为“ 4000000”(4000k)的整数。为了确定运行时的输出是4000000,我仔细检查了一下。
此处查询:
MessageFormat.format(“ INSERT INTO PlayerData(
UUID
,VIPExpirationDate
,IPv4
,FirstPlayTime
,LastPlayTime
,TotalPlayTime
,{{ 1}},TotalLogins
,MaxDealtDamage
)” +“ 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);
答案 0 :(得分:1)
MessageFormat
不是用于创建SQL语句的工具。这是一个用于以正确格式构建文本消息的简单实用程序。
您应该按照PreparedStatement
教程中所述将Using Prepared Statements与绑定参数一起使用。 JDBC将负责转义和格式化提供的值,以便数据库服务器可以接收它们,同时防止SQL Injections。