【问题标题】:com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: ',3'com.mysql.jdbc.MysqlDataTruncation:数据截断:截断不正确的 DOUBLE 值:',3'
【发布时间】:2012-07-03 01:10:38
【问题描述】:

我正在尝试为我的 Minecraft 服务器编写商店插件,但每当有人执行 /purchase 命令时,我都会收到错误消息。

这是错误:

2012-07-03 04:27:28 [严重] com.mysql.jdbc.MysqlDataTruncation:数据截断:截断不正确的 DOUBLE 值:',3' 2012-07-03 04:27:28 [严重] 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3591) 2012-07-03 04:27:28 [严重] 在 com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) 2012-07-03 04:27:28 [严重] 在 com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) 2012-07-03 04:27:28 [严重] 在 com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) 2012-07-03 04:27:28 [严重] 在 com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) 2012-07-03 04:27:28 [严重] 在 com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662) 2012-07-03 04:27:28 [严重] 在 com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581) 2012-07-03 04:27:28 [严重] 在 com.Chipmunk9998.Cod.CodCommandExecutor.onCommand(CodCommandExecutor.java:1421) 2012-07-03 04:27:28 [严重] 在 org.bukkit.command.PluginCommand.execute(PluginCommand.java:40) 2012-07-03 04:27:28 [严重] 在 org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166) 2012-07-03 04:27:28 [严重] 在 org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:479) 2012-07-03 04:27:28 [严重] 在 com.Chipmunk9998.Cod.CodCommandExecutor.onCommand(CodCommandExecutor.java:1443) 2012-07-03 04:27:28 [严重] 在 org.bukkit.command.PluginCommand.execute(PluginCommand.java:40) 2012-07-03 04:27:28 [严重] 在 org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166) 2012-07-03 04:27:28 [严重] 在 org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:479) 2012-07-03 04:27:28 [严重] 在 net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:821) 2012-07-03 04:27:28 [严重] 在 net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:781) 2012-07-03 04:27:28 [严重] 在 net.minecraft.server.NetServerHandler.a(NetServerHandler.java:764) 2012-07-03 04:27:28 [严重] 在 net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:34) 2012-07-03 04:27:28 [严重] 在 net.minecraft.server.NetworkManager.b(NetworkManager.java:229) 2012-07-03 04:27:28 [严重] 在 net.minecraft.server.NetServerHandler.a(NetServerHandler.java:113) 2012-07-03 04:27:28 [严重] 在 net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78) 2012-07-03 04:27:28 [严重] 在 net.minecraft.server.MinecraftServer.w(MinecraftServer.java:567) 2012-07-03 04:27:28 [严重] 在 net.minecraft.server.MinecraftServer.run(MinecraftServer.java:459) 2012-07-03 04:27:28 [严重] 在 net.minecraft.server.ThreadServerApplication.run(SourceFile:492)

这是我的代码:

if (cmdsender == null) {
  File weaponFile = new File(plugin.getDataFolder(), "weapons.yml");
  FileConfiguration weaponData = YamlConfiguration.loadConfiguration(weaponFile);

  String sql = "UPDATE account_info SET Money = Money - "
    + weaponData.getString(args[0] + "." + args[1] + ".Price")
    + " WHERE Username = '" + args[2] + "'";

  try {
    plugin.st.executeUpdate(sql);
  } catch (SQLException e) {
    e.printStackTrace();
  }

  sql = "UPDATE account_info SET Bought_" + args[0] + " = Bought_" + args[0]
    + " + ," + args[1] + " WHERE Username = '" + args[2] + "'";

  try {
    plugin.st.executeUpdate(sql);
  } catch (SQLException e) {
    e.printStackTrace();
  }

  plugin.getServer().getPlayer(args[2]).sendMessage(
    "You have successfully bought the "
    + weaponData.getString(args[0] + "." + args[1] + ".Name") + "."
  );

  return true;
}

我尝试用谷歌搜索它,但找不到任何有用的东西。

【问题讨论】:

  • 我猜这与你的 args[] 有关。你可以对你的 args[] 做一个简单的 System.out.println() 来检查它们的值吗?
  • 只需像 System.out.println(sql) 一样编写和检查 sql;我认为预期为 double 的值作为具有 , 逗号的字符串传递。所以导致查询失败。

标签: java mysql jdbc truncation


【解决方案1】:

这行好像有错误:

  sql = "UPDATE account_info SET Bought_" + args[0] + " = Bought_" + args[0]
    + " + ," + args[1] + " WHERE Username = '" + args[2] + "'";

args[1] 之前的此字符串中有一个错误的逗号。如果args[0]、args[1] 和args[2] 分别包含1、3 和foo,那么sql 将评估为:

UPDATE account_info SET Bought_1 = Bought_1 + ,3 WHERE Username = 'foo'

这显然是一个语法错误,并解释了您的错误消息Data truncation: Truncated incorrect DOUBLE value: ',3'。

【讨论】:

  • 我试图添加逗号作为拆分字符串的一种方式,这样我就可以列出他们拥有的所有项目并让他们选择他们想要使用的项目。有什么办法可以解决这个问题,或者我可以放一个不同的角色吗?
  • @DavidCarpenter:为此,您需要使用 MySQL 的 CONCAT() 函数并引用您的字符串文字,例如... = CONCAT(Bought_" + args[0] + ", '," + args[1] + "') WHERE ...。但是,您可能应该通过存储例如 normalise 您的数据结构。 (Username, Bought) 在单独的表中配对,然后您可以根据需要使用 join 您的查询。
【解决方案2】:

我在 JSP 中编写代码以使用 UPDATE 查询更新数据库记录。 "UPDATE customer_details set Customer_fname=?,Customer_lname=?,Customer_home_address=?,Customer_office_address=?,Customer_mobile_no=?,Customer_city=?,Customer_state=?,Customer_dob=? where User_id=?

在最后一个 User_id 的参数中......,我不小心写了 ps.setString(9,uname) 这是不同数据类型的不同变量......这给了我一个 错误数据截断:不正确的双值。

我用 ps.setInt(9,uid) 更正了它,它是正确的变量和数据类型,然后错误就消失了......!!

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-08-07
    • 2015-02-23
    • 2019-12-26
    • 2020-06-02
    • 1970-01-01
    • 2016-03-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多