Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/74.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 我可以用这种方式编写Sql查询吗_Java_Sql_Prepared Statement - Fatal编程技术网

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

Java 我可以用这种方式编写Sql查询吗,java,sql,prepared-statement,Java,Sql,Prepared Statement,我想知道我可以用这种格式插入表名吗 String update = "UPDATE ? SET Status = ? WHERE Name = ?"; stmt.setString(1,tableName); stmt.setString(2,status); stmt.setString(3,name); insert和delete语句也一样?通常,您可以按如下所示执行此操作 String sql = "UPDATE " + tableName " SET Status = ? WH

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

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

insert和delete语句也一样?

通常,您可以按如下所示执行此操作

    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();
        }
    }

简而言之,答案是否定的。但你可以这样做:

String update = "UPDATE " + tableName + " SET Status = ? WHERE Name = ?";
...
stmt.setString(1,status);
stmt.setString(2,name);
但是要注意SQL注入。确保您的表名来自安全来源。


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

不,您不能这样做,因为您肯定在使用准备好的语句。无法执行此操作的原因是PreparedStatement是预编译的,因此它需要您正在修改的表(其数据使用DML)或结构(使用DDL)。如果不提及表名,那么该语句将如何预编译

如果需要,可以使用动态SQL,但在这种情况下,不必使用PreparedStatement,可以使用更简单的实现语句


希望这是有帮助的

你试过了吗?不,你不能参数化表名。使用动态SQL您可以,但只能使用动态SQL,而这并没有做到。如果不小心的话,动态SQL确实会让您接受SQL注入。如果您需要,我怀疑数据结构没有正确完成。。。不确定,因为我看不到您拥有什么,也看不到您试图实现什么,但是如果您必须在这么多表上复制完全相同的查询,您希望有一个通用的预处理语句,那么可能会发生一些不好的事情……谢谢您,我现在尝试了,但失败了