2012-07-03 2 views
2

J'essaye d'écrire un plugin de magasin pour mon serveur Minecraft, mais je continue d'obtenir une erreur chaque fois que quelqu'un fait la commande/achat .com.mysql.jdbc.MysqlDataTruncation: Troncature de données: tronqué incorrect DOUBLE valeur: ', 3'

est ici l'erreur:

 
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) 

Et voici mon code:

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; 
} 

J'ai essayé googler, mais n'a pas pu trouver tout ce qui a aidé.

+0

Je suppose que cela a à voir avec vos args []. Pouvez-vous faire un simple System.out.println() de vos args [] pour vérifier leurs valeurs? – Sujay

+0

il suffit d'écrire et de vérifier sql comme System.out.println (sql); Je pense que la valeur qui est attendue en tant que double est passée en tant que chaîne qui a, virgule. Donc, ce qui provoque l'échec de la requête. –

Répondre

3

Il semble que vous avez une erreur dans cette ligne:

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

Il y a une virgule erronée dans cette chaîne avant args[1]. Si args[0], args[1] et args[2] contiennent respectivement 1, 3 et foo, puis sql évaluera à:

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

qui est clairement une erreur de syntaxe et explique votre message d'erreur Data truncation: Truncated incorrect DOUBLE value: ',3'.

+0

J'essayais d'ajouter la virgule comme un moyen de diviser la chaîne afin que je puisse lister tous les éléments qu'ils ont et laissez-les choisir celui qu'ils voulaient utiliser. Y at-il un moyen de contourner cela, ou un personnage différent que je peux mettre là? –

+0

@DavidCarpenter: Pour ce faire, vous devez utiliser la fonction ['CONCAT()' de MySQL (http://dev.mysql.com/doc/fr/string-functions.html#function_concat) et citez vos littéraux de chaîne par exemple '... = CONCAT (Bought_" + args [0] + ",", "+ args [1] +" ') O WH ... '. Cependant, vous devriez probablement [normaliser] (http://en.wikipedia.org/wiki/Database_normalization) votre structure de données en stockant par ex. '(Nom d'utilisateur, acheté)' paires dans une table séparée, avec laquelle vous pourriez ensuite [rejoindre] (http://www.codinghorror.com/blog/2007/10/a-visual-explanation-of-sql-joins. html) vos requêtes le cas échéant. – eggyal

-2

Je codais dans JSP pour la mise à jour des enregistrements de base de données en utilisant la requête UPDATE. « Mettre à Jour customer_details = ?, mis Customer_fname Customer_lname = ?, Customer_home_address = ?, Customer_office_address = ?, Customer_mobile_no = ?, Customer_city = ?, Customer_state = ?, Customer_dob =? Où User_id =

dans le dernier paramètre de User_id ...., j'écris accidentellement ps.setString (9, uname) qui était variable différente avec différents types de données .... ce qui me donne une erreur de troncature de données:. doubleValue incorrecte

je l'ai corrigé avec ps.setInt (9, uid) qui était la variable correcte et le type de données puis erreur était parti....!!

Questions connexes