java - 错误: MySQLSyntaxErrorException in a java-based web app

标签 java mysql jdbc

public List<User> arrangeUsers(String option) {
    String query = "";
    if (option.equals("lastNameAsc")) {
        query = "SELECT * FROM ? ORDER BY lastName ASC;";
    } else if (option.equals("lastNameDesc")) {
        query = "SELECT * FROM ? ORDER BY lastName DESC;";
    } else if (option.equals("dobAsc")) {
        query = "SELECT * FROM ? ORDER BY dateOfBirth ASC;";
    } else if (option.equals("dobDesc")) {
        query = "SELECT * FROM ? ORDER BY dateOfBirth DESC;";
    }
    boolean listChoice;
    try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            PreparedStatement stmt = conn.prepareStatement(query);) {
        if (searchList.size() > 0) {
            stmt.setString(1, "search_results");
            searchList.clear();
            listChoice = true;
        } else {
            stmt.setString(1, "users");
            users.clear();
            listChoice = false;
        }
        ResultSet result = stmt.executeQuery();
        while (result.next()) {
            User user = new User();
            user.setFirstName(result.getString("firstName"));
            user.setLastName(result.getString("lastName"));
            user.setDob(result.getDate("dateOfBirth"));
            user.setPhoneNumber(result.getString("phoneNumber"));
            user.setEmail(result.getString("email"));
            user.setUserID(result.getInt("id"));
            if (listChoice) {
                searchList.add(user);
            } else {
                users.add(user);
            }

        }
    } catch (SQLException sqle) {
        System.err.println(sqle);
        sqle.printStackTrace();
        return null;
    }
    if (listChoice) {
        return searchList;
    } else {
        return users;
    }
}

上述方法返回错误:

com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near ''users' ORDER BY lastName DESC' at line 1 " error.

该方法应该根据客户端要求的顺序排列用户列表(表)。有什么建议吗?错误消息的原因是什么?如有必要,我准备提供任何其他详细信息。

最佳答案

表名不能用作参数。它必须是硬编码的。您可以执行以下操作:

public List<User> arrangeUsers(String option) {
    String query = "SELECT * FROM ";
    if (searchList.size() > 0) {
        query += "search_results ";
        searchList.clear();
        listChoice = true;
    } else {
        query += "users ";
        users.clear();
        listChoice = false;
    }

    if (option.equals("lastNameAsc")) {
        query += "ORDER BY lastName ASC;";
    } else if (option.equals("lastNameDesc")) {
        query +=  "ORDER BY lastName DESC;";
    } else if (option.equals("dobAsc")) {
        query +=  "ORDER BY dateOfBirth ASC;";
    } else if (option.equals("dobDesc")) {
        query += "ORDER BY dateOfBirth DESC;";
    }
    boolean listChoice;
    try (Connection conn = DriverManager.getConnection(URL, USERNAME, PASSWORD);
            PreparedStatement stmt = conn.prepareStatement(query);) {
        ResultSet result = stmt.executeQuery();
        while (result.next()) {
            User user = new User();
            user.setFirstName(result.getString("firstName"));
            user.setLastName(result.getString("lastName"));
            user.setDob(result.getDate("dateOfBirth"));
            user.setPhoneNumber(result.getString("phoneNumber"));
            user.setEmail(result.getString("email"));
            user.setUserID(result.getInt("id"));
            if (listChoice) {
                searchList.add(user);
            } else {
                users.add(user);
            }

        }
    } catch (SQLException sqle) {
        System.err.println(sqle);
        sqle.printStackTrace();
        return null;
    }
    if (listChoice) {
        return searchList;
    } else {
        return users;
    }
}

希望有帮助。

关于java - 错误: MySQLSyntaxErrorException in a java-based web app,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40019603/

相关文章:

java - 使用 Executorservice 中的 Java Observable 实现 Rest 服务

java - 为什么 HttpRequest.HttpMethod 是字符串而不是枚举?

java - 需要包含 <my reference> 的封闭实例

java - 新手帮助-Java货币计算器

java - 按列将数据插入 PostgreSQL 中的行

mysql - 我需要优化 MySQL 查询

php - 显示特定类别 laravel 5

mysql - 使用 HikariCP 和 Slick 管理 MySQL 连接

mysql - SpagoBI 5 JDBC 在远程服务器中的安装

java - 无法在 XAMPP-> mysql 上向 java 显示数据库