0

我想知道我可以以这种格式插入表名吗

String update = "UPDATE ? SET Status = ? WHERE Name = ?";
stmt.setString(1,tableName);
stmt.setString(2,status);
stmt.setString(3,name);

插入和删除语句相同吗?

4

4 回答 4

5

不。

在查询中放置问号的原因(除了防止 SQL 注入)是为了使数据库可以准备一次语句并使用具有不同参数的准备好的语句。如果它不知道您正在使用什么表,它将无法准备语句。

于 2013-03-13T12:40:47.443 回答
3

最简洁的答案是不。但是你可以这样做:

String update = "UPDATE " + tableName + " SET Status = ? WHERE Name = ?";
...
stmt.setString(1,status);
stmt.setString(2,name);

请注意 SQL 注入。确保您的 tableName 来自安全来源。

于 2013-03-13T12:36:27.730 回答
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();
        }
    }
于 2013-03-13T12:36:01.200 回答
0

不,您不能这样做,因为您肯定使用的是准备好的语句。你不能这样做的原因是 PreparedStatement 是预编译的,所以它需要你正在修改的表(它的数据使用 DML)或结构上(使用 DDL)。如果您不提及表表名,该语句将如何预编译?

如果您希望可以使用动态 SQL,但在这种情况下您不必使用 PreparedStatement,您可以使用更简单的实现语句来使用它。

希望这有帮助!

于 2013-03-13T12:59:20.583 回答