2014-07-21 61 views
-2
    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 /級別1-25的Java JDBC - 列數並不在行匹配值計數1

服務器提供級別0-24(填補1- 25個插槽)

表中有51個更新,51個聲明欄和51個欄目

一切拼寫正確。

,如果它的事項我使用聲明 - >的executeUpdate(字符串)

value.executeUpdate(query); 
+4

Wow ... 51個SQL注入機會。您應該使用參數化查詢。 –

+0

你確定你想要帶有列名的符號嗎?即使你這樣做可能應該是'或者'這當然可能是數據庫的依賴,你不會說你正在使用哪個數據庫 – Caleryn

+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"); 

我不會做多列,因爲你的例子是可惡。如果我是你,我會規範化該架構。

+0

+1如果我是你,我會規範化這個模式。 – Leo

相關問題