INSERT INTO语句自动将1000个分隔符添加到以1000k开始的java整数

时间:2019-01-22 21:07:45

标签: java insert mariadb

我遇到了一个奇怪的问题:

我有一列“ 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(UUIDVIPExpirationDateIPv4FirstPlayTimeLastPlayTimeTotalPlayTime,{{ 1}},TotalLoginsMaxDealtDamage)”                       +“ 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);

1 个答案:

答案 0 :(得分:1)

MessageFormat不是用于创建SQL语句的工具。这是一个用于以正确格式构建文本消息的简单实用程序。

您应该按照PreparedStatement教程中所述将Using Prepared Statements与绑定参数一起使用。 JDBC将负责转义和格式化提供的值,以便数据库服务器可以接收它们,同时防止SQL Injections