我可以用这种方式编写我的Sql查询吗?

时间:2013-03-13 12:30:05

标签: java sql prepared-statement

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

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

对于插入和删除语句是否相同?

4 个答案:

答案 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,您可以使用更简单的实现语句来使用它。

希望这有用!!