Java com.mysql.jdbc.MysqlDataTruncation:数据截断:截断的双精度值不正确:';,3';

Java com.mysql.jdbc.MysqlDataTruncation:数据截断:截断的双精度值不正确:';,3';,java,mysql,jdbc,truncation,Java,Mysql,Jdbc,Truncation,我正试图为我的Minecraft服务器编写一个商店插件,但每当有人执行/purchase命令时,我总是会出错 以下是错误: 2012-07-03 04:27:28 [SEVERE] com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: ',3' 2012-07-03 04:27:28 [SEVERE] at com.mysql.jdbc.MysqlIO.checkE

我正试图为我的Minecraft服务器编写一个商店插件,但每当有人执行/purchase命令时,我总是会出错

以下是错误:

2012-07-03 04:27:28 [SEVERE] com.mysql.jdbc.MysqlDataTruncation: Data truncation: Truncated incorrect DOUBLE value: ',3' 2012-07-03 04:27:28 [SEVERE] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3591) 2012-07-03 04:27:28 [SEVERE] at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3525) 2012-07-03 04:27:28 [SEVERE] at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:1986) 2012-07-03 04:27:28 [SEVERE] at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2140) 2012-07-03 04:27:28 [SEVERE] at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2620) 2012-07-03 04:27:28 [SEVERE] at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1662) 2012-07-03 04:27:28 [SEVERE] at com.mysql.jdbc.StatementImpl.executeUpdate(StatementImpl.java:1581) 2012-07-03 04:27:28 [SEVERE] at com.Chipmunk9998.Cod.CodCommandExecutor.onCommand(CodCommandExecutor.java:1421) 2012-07-03 04:27:28 [SEVERE] at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40) 2012-07-03 04:27:28 [SEVERE] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166) 2012-07-03 04:27:28 [SEVERE] at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:479) 2012-07-03 04:27:28 [SEVERE] at com.Chipmunk9998.Cod.CodCommandExecutor.onCommand(CodCommandExecutor.java:1443) 2012-07-03 04:27:28 [SEVERE] at org.bukkit.command.PluginCommand.execute(PluginCommand.java:40) 2012-07-03 04:27:28 [SEVERE] at org.bukkit.command.SimpleCommandMap.dispatch(SimpleCommandMap.java:166) 2012-07-03 04:27:28 [SEVERE] at org.bukkit.craftbukkit.CraftServer.dispatchCommand(CraftServer.java:479) 2012-07-03 04:27:28 [SEVERE] at net.minecraft.server.NetServerHandler.handleCommand(NetServerHandler.java:821) 2012-07-03 04:27:28 [SEVERE] at net.minecraft.server.NetServerHandler.chat(NetServerHandler.java:781) 2012-07-03 04:27:28 [SEVERE] at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:764) 2012-07-03 04:27:28 [SEVERE] at net.minecraft.server.Packet3Chat.handle(Packet3Chat.java:34) 2012-07-03 04:27:28 [SEVERE] at net.minecraft.server.NetworkManager.b(NetworkManager.java:229) 2012-07-03 04:27:28 [SEVERE] at net.minecraft.server.NetServerHandler.a(NetServerHandler.java:113) 2012-07-03 04:27:28 [SEVERE] at net.minecraft.server.NetworkListenThread.a(NetworkListenThread.java:78) 2012-07-03 04:27:28 [SEVERE] at net.minecraft.server.MinecraftServer.w(MinecraftServer.java:567) 2012-07-03 04:27:28 [SEVERE] at net.minecraft.server.MinecraftServer.run(MinecraftServer.java:459) 2012-07-03 04:27:28 [SEVERE] at net.minecraft.server.ThreadServerApplication.run(SourceFile:492)
我试着在谷歌上搜索,但找不到任何有用的东西。

您的这一行似乎有错误:

  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\u info SET bunded\u 1=bunded\u 1+,3其中Username='foo'

这显然是一个语法错误,并解释了错误消息
数据截断:截断不正确的双精度值:',3'

我在JSP中编写代码,使用更新查询更新数据库记录。 “更新客户详细信息设置客户名称=?,客户名称=?,客户家庭地址=?,客户办公室地址=?,客户移动电话号码=?,客户城市=?,客户状态=?,客户dob=?其中用户id=?

在最后一个用户id的参数中,我无意中写入了ps.setString(9,uname),这是具有不同数据类型的不同变量…这给了我一个数据截断错误:不正确的doublevalue


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

我猜这与您的args[]有关。您能对args[]执行一个简单的System.out.println()来检查它们的值吗?只需像System.out.println(sql)那样编写和检查sql即可;我认为应该是double的值是作为字符串传递的,该字符串有逗号。这会导致查询失败。我试图添加逗号,作为将字符串拆分的一种方法,这样我就可以列出他们拥有的所有项,并让他们选择他们想要使用的项。有什么方法可以解决这个问题,或者我可以在其中添加一个不同的字符吗?@DavidCarpenter:要做到这一点,您需要使用MySQL函数并引用您的字符串文本,例如
..=CONCAT(bunded_“+args[0]+”,“,+args[1]+”),其中…
。但是,您可能应该通过存储
(Username,bunded)来引用您的数据结构
在一个单独的表中配对,然后您可以根据需要使用该表进行查询。
  sql = "UPDATE account_info SET Bought_" + args[0] + " = Bought_" + args[0]
    + " + ," + args[1] + " WHERE Username = '" + args[2] + "'";