应该在哪里?放在PreparedStatement中?

Where should ? be placed in a PreparedStatement?

我正在使用 PreparedStatement 到 select 来自 table 的记录:

public static String getMemberInfo(String columnName, Integer memberId) {       
    String memberInfo = "";
    String sql = "SELECT ? FROM member WHERE member_id = ?";
    DatabaseConnector.setConn();

    try(Connection conn = DatabaseConnector.getConn();
        PreparedStatement ps = conn.prepareStatement(sql)) {

        ps.setString(1, columnName);
        ps.setInt(2, memberId);

        try(ResultSet rs = ps.executeQuery()) {
            if(rs.next()) {
                memberInfo = rs.getString(columnName);
            }
        }

    } catch(SQLException se) {
        se.printStackTrace();
    }

    return memberInfo;
}

当我使用 SELECT " + columnName + " FROM member WHERE member_id = ?,有效。

但是当我使用 SELECT ? FROM member WHERE member_id = ?,没有。

?应该放在准备好的语句中的什么地方?

列名必须硬编码,只能使用?设置列值。

但您可以通过执行以下操作来设置动态列名称:

String sql = "SELECT "+ columnName +" FROM member WHERE member_id = ?";

?用于输入值(通常在 WHERE 子句条件中)。

?不适用于选定的列。