从MySql数据库读取时发生Java Preparedstatement错误

从MySql数据库读取时发生Java Preparedstatement错误,java,mysql,Java,Mysql,我正在开发一个从本地数据库提取数据的简单应用程序。当我使用字符串进行SQL查询时,下面的代码可以很好地工作,但我无法让它与PreparedStatement一起工作。我已经回顾了这里发布的类似问题,但大多数问题都是由这样做引起的,preparedStmt.executeQuery(查询);而不是这个preparedStmt.executeQuery();这是密码 private final String POSTTITLE= "posttitle"; // DB Column n

我正在开发一个从本地数据库提取数据的简单应用程序。当我使用字符串进行SQL查询时,下面的代码可以很好地工作,但我无法让它与PreparedStatement一起工作。我已经回顾了这里发布的类似问题,但大多数问题都是由这样做引起的,preparedStmt.executeQuery(查询);而不是这个preparedStmt.executeQuery();这是密码

    private final String POSTTITLE=     "posttitle"; // DB Column name
    private final String POSTCONTENT=   "content"; // DB Column name

   public String getDbContent(){
        try{
            String query ="select values(?, ?) from blog";
            PreparedStatement preparedStmt = this.connect.prepareStatement(query);
            preparedStmt.setString (1,POSTTITLE);
            preparedStmt.setString (2,POSTCONTENT);
            ResultSet rs = preparedStmt.executeQuery();
            rs.next();
            return(rs.getString(this.POSTCONTENT)); //Will replace with loop to get all content
        } catch(Exception e) {
           System.err.println("Error Reading database!");
           System.err.println(e);
           return("Error: "+e);
        }
    }
这是我得到的错误:
您的SQL语法有错误;检查与您的MySQL服务器版本对应的手册,以了解在第1行“博客”的“posttitle”、“content”)附近使用的正确语法。准备好的语句中的参数用于值-您试图使用它们来选择字段。他们就是不那样工作


在这个非常具体的实例中,您需要使SQL动态化。但是,您需要确保允许指定列的任何代码都受到严格约束,以避免SQL注入攻击。(例如,您可以有一个列在中的枚举,或一个允许值的白名单。)

尝试连接选择查询:

String query ="select "+POSTTITLE+","+POSTCONTENT+" from blog";
请记住,准备好的语句用于值,而不是查询参数,对于它们,我们只使用连接。

尝试以下方法:

String query ="select POSTTITLE, POSTCONTENT from blog";
PreparedStatement preparedStmt = this.connect.prepareStatement(query);
ResultSet rs = preparedStmt.executeQuery();
rs.next();

不需要使用字段名作为参数。

是否确实要将列名与查询分开?
SELECT
的语法从来不是
SELECT VALUES(),而是
SELECT expression1、expression2、。。。来自…
,其中包含涉及列名的表达式。在大多数情况下,您都知道要提前获取的列。不清楚您试图通过此查询实现什么。是的,我认为您是对的,没有真正的理由以编程方式输入列。非常感谢。