Java JDBC - 列计数与第1行的值计数不匹配

时间:2014-07-21 17:00:54

标签: java mysql sql jdbc

                 String query =
                        "INSERT INTO hs (`username`, `lvl_1`, `xp_1`, `lvl_2`, `xp_2`, `lvl_3`, `xp_3`, `lvl_4`, `xp_4`, `lvl_5`, `xp_5`, `lvl_6`, `xp_6`, `lvl_7`, `xp_7`, `lvl_8`, `xp_8`, `lvl_9`, `xp_9`, `lvl_10`, `xp_10`, `lvl_11`, `xp_11`, `lvl_12`, `xp_12`, `lvl_13`, `xp_13`, `lvl_14`, `xp_14`, `lvl_15`, `xp_15`, `lvl_16`, `xp_16`, `lvl_17`, `xp_17`, `lvl_18`, `xp_18`, `lvl_19`, `xp_19`, `lvl_20`, `xp_20`, `lvl_21`, `xp_21`, `lvl_22`, `xp_22`, `lvl_23`, `xp_23`, `lvl_24`, `xp_24`, `lvl_25`, `xp_25`) "
                        + "VALUES ('"+p.getUsername()+"', '"+ p.getSkills().getLevel(0) + "', '"+ p.getSkills().getXp(0) + "', '"+ p.getSkills().getLevel(1) + "', '"+ p.getSkills().getXp(1) 
                                + "', '"+ p.getSkills().getLevel(2) + "', '"+ p.getSkills().getXp(2) + "', '" + p.getSkills().getLevel(3) + "', '" + p.getSkills().getXp(3) + "', '"
                                + "', '"+ p.getSkills().getLevel(4) + "', '"+ p.getSkills().getXp(4) + "', '" + p.getSkills().getLevel(5) + "', '" + p.getSkills().getXp(5) 
                                + "', '"+ p.getSkills().getLevel(6) + "', '"+ p.getSkills().getXp(6) + "', '" + p.getSkills().getLevel(7) + "', '" + p.getSkills().getXp(7) 
                                + "', '"+ p.getSkills().getLevel(8) +"', '" + p.getSkills().getXp(8) + "', '" + p.getSkills().getLevel(9) + "', '" + p.getSkills().getXp(9) 
                                + "', '" + p.getSkills().getLevel(10) +"', '" + p.getSkills().getXp(10) + "', '" + p.getSkills().getLevel(11) + "', '" + p.getSkills().getXp(11)
                                + "', '" + p.getSkills().getLevel(12) +"', '" + p.getSkills().getXp(12) + "', '" + p.getSkills().getLevel(13) + "', '" + p.getSkills().getXp(13)
                                + "', '" + p.getSkills().getLevel(14) +"', '" + p.getSkills().getXp(14) + "', '" + p.getSkills().getLevel(15) + "', '" + p.getSkills().getXp(15)
                                + "', '" + p.getSkills().getLevel(16) +"', '" + p.getSkills().getXp(16) + "', '" + p.getSkills().getLevel(17) + "', '" + p.getSkills().getXp(17)
                                + "', '" + p.getSkills().getLevel(18) +"', '" + p.getSkills().getXp(18) + "', '" + p.getSkills().getLevel(19) + "', '" + p.getSkills().getXp(10)
                                + "', '" + p.getSkills().getLevel(20) +"', '" + p.getSkills().getXp(20) + "', '" + p.getSkills().getLevel(21) + "', '" + p.getSkills().getXp(21)
                                + "', '" + p.getSkills().getLevel(22) +"', '" + p.getSkills().getXp(22) + "', '" + p.getSkills().getLevel(23) + "', '" + p.getSkills().getXp(23)
                                + "', '" + p.getSkills().getLevel(24) +"', '" + p.getSkills().getXp(24) + "')";

不确定是什么问题,因为你可以看到我甚至宣布要更新的值(在使用INSERT查询后直接从PHPMyAdmin获取,以确保我在尝试解决此问题时已经完成了所有操作。表格正好有51列,用户名,然后是xp / level 1-25。

服务器提供0-24级(填充1-25个插槽)。

表中有51个更新,51个声明列和51列。

一切拼写正确。

如果重要我使用 Statement-> executeUpdate(String)

value.executeUpdate(query);

1 个答案:

答案 0 :(得分:1)

您的数据库架构严重非规范化。

最好使用PreparedStatement并将值绑定到参数。

private static final String INSERT_SQL = "INSERT INTO HS(lvl_1) values(?)";
PreparedStatement ps = connection.prepareStatement(INSERT_SQL);
ps.setString(1, "foo");

我不会做多个专栏,因为你的例子令人发指。如果我是你,我会对该架构进行规范化。