The best way would be:
- To put your table name between the characters used to delimit the name of the table which change from one database to another
- And escape the provided table name accordingly such that SQL injection won't be possible anymore.
So for example in case of MySQL
, the table name's delimiter is the backquote character and we escape it by simply doubling it.
If your query is SELECT foo from bar
, you could rewrite your query as next:
String query = String.format("SELECT foo from `%s`", tableName.replace("`", "``"));
This way you inject the name of your table without taking the risk of seeing some malicious code being injected.
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…