我想知道我可以用这种格式插入表名吗
String update = "UPDATE ? SET Status = ? WHERE Name = ?";
stmt.setString(1,tableName);
stmt.setString(2,status);
stmt.setString(3,name);
对于插入和删除语句是否相同?
答案 0 :(得分:5)
没有
在查询中放置问号的原因(除了防止SQL注入)是因为数据库可以准备一次语句并使用具有不同参数的预准备语句。如果它不知道你正在使用什么表,它将无法准备一份声明。
答案 1 :(得分:3)
简短的回答是否定的。但你可以这样做:
String update = "UPDATE " + tableName + " SET Status = ? WHERE Name = ?";
...
stmt.setString(1,status);
stmt.setString(2,name);
请注意SQL注入。确保您的tableName来自安全源。
答案 2 :(得分:1)
通常,你会这样做,如下所示......
String sql = "UPDATE " + tableName " SET Status = ? WHERE Name = ?";
PreparedStatement stmt = null;
try {
stmt = connection.prepareStatement(sql);
stmt.setString(1, status);
stmt.setString(2, name);
stmt.executeUpdate();
} finally {
if (stmt != null) {
stmt.close();
}
}
答案 3 :(得分:0)
不,你不能这样做,因为你肯定使用准备好的声明。你不能这样做的原因是PreparedStatement是预编译的,所以它需要你修改的表(它的数据使用DML)或结构上(使用DDL)。如果你没有提到表格表名,那么该语句将如何预编译?
如果您希望可以使用动态SQL,但在这种情况下,您不必使用PreparedStatement,您可以使用更简单的实现语句来使用它。
希望这有用!!