2013-04-27 65 views
0

我有在做同樣的事情,但在不同的表幾預處理語句:準備語句設置表NEM用於插入

ReportImageWrongLang = con.prepareStatement("INSERT INTO userReportedWrongLang VALUES (?,?,?) ON DUPLICATE KEY UPDATE UserId=UserID"); 
ReportImageProhibited = con.prepareStatement("INSERT INTO userReportedImages VALUES (?,?,?) ON DUPLICATE KEY UPDATE UserId=UserID"); 

ReportElse = con.prepareStatement(「INSERT INTO Reportelse VALUES(?,? ,?)ON DUPLICATE KEY UPDATE UserId = UserID「);

我根據我的java程序中的某些事件調用此語句。

我想改變這3語句到一個語句:

Report = con.prepareStatement("INSERT INTO ? VALUES (?,?,?) ON DUPLICATE KEY UPDATE UserId=UserID"); 

,並設置第一個參數是表名(Report.setString(1,表名))

但我m如果這個錯誤:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''userreportedimages' VALUES ('3',331,1) ON DUPLICATE KEY UPDATE UserId=UserID' at line 1 

有沒有辦法做到這一點?

回答

0

您不能參數化SQL標識符,例如表名或列名。

但是,您可以編寫一個Java函數,它將表或列名稱作爲參數並將其連接成一個SQL字符串。不過,請注意確保它已被清理以防止SQL注入攻擊。

也就是說,需要做這樣的事情往往表明一個嚴重的非標準化模式。多個具有相同結構的表經常可以(也應該)合併到一個表中,並且列中有一列表明這兩者之間有什麼不同。

+0

好的,謝謝,我會再次重新考慮我的模式 – 2013-04-27 19:55:09