我的Java代码生成一个查询 - >从' emp'删除,但我需要它作为 - >从emp中删除。请帮帮我
void deleteData(Map records) throws SQLException {
String delQuery = "delete from ? where empid = ?"
String tbname = String records.get(tabName);
String empid = String records.get(empid);
PreparedStatement data = getPreparedStatement(DelQuery);
data.setString(1,tbname);
data.setString(2,empid);
System.out.println("Query is ---->"+data.toString());
ResultSet rst = data.executeQuery();
}
当我看到控制台出错时,显示:
Query is ----> DELETE FROM 'emp' WHERE empid = '21'
Could not execute sql command - Original message: null
答案 0 :(得分:3)
不幸的是,您无法将表名设置为参数。您必须将其作为SQL的一部分进行编码。
delQuery = "DELETE FROM " + tbname + " WHERE empid = ?"
显然,关于确保您的表名字段被清理的常见警告适用。
答案 1 :(得分:0)
您不能将表名与PreparedStatement绑定,只能绑定列值。你可以这样做:
...
String tbname = String records.get(tabName);
String delQuery = "delete from " + tbname + " where empid = ?";
...
这不会使它更容易受到注入,因为tableName不应该来自用户。