Select 带有准备好的语句 Java

Select with prepared statements Java

我刚刚了解了准备好的语句,现在我正试图将它们包含到我的 java 程序中。但是,当我尝试将值添加到语句(table 和名称)时出现异常。当我只准备一个变量时,它工作正常。 我做错了什么?

[SQLITE_ERROR] SQL error or missing database (near "?": syntax error)

String sql="SELECT * FROM ? WHERE name = ?";
    try {
        PreparedStatement preparedStatement = connection.prepareStatement(sql);
        preparedStatement.setString(1, table);
        preparedStatement.setString(2, name);
        ResultSet checkTable = preparedStatement.executeQuery();

准备语句用于值,table 名称不被视为值。所以你试图实现的目标是不可能的。

虽然这样也行得通:

String sql="SELECT * FROM any_table_name WHERE name = ?";
try {
    PreparedStatement preparedStatement = connection.prepareStatement(sql);
    preparedStatement.setString(1, name);
    ResultSet checkTable = preparedStatement.executeQuery();
} catch (Exception e) {}

准备好的语句用于列值而不是 table 名称。您应该按如下方式进行。

String sql = "SELECT * FROM `" + table + "` WHERE name = ?";

准备好的语句不是这样工作的。奇怪的是,你 can't use placeholders for table names。解决方案是使用类似的东西:

String sql = String.format("SELECT * FROM %s WHERE name = ?", table);

...并继续您的其余代码。