从MySql数据库读取时出现Java Preparedstatement错误

时间:2017-04-04 15:09:03

标签: java mysql

我正在开发一个从本地数据库中提取数据的简单应用程序。当我使用字符串进行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服务器版本相对应的手册,以获得正确的语法,以便在博客'' posttitle'内容')附近使用。在第1行

3 个答案:

答案 0 :(得分:2)

预准备语句中的参数用于值 - 您尝试使用它们来选择字段。他们只是不这样做。

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

答案 1 :(得分:0)

尝试连接选择查询:

String query ="select "+POSTTITLE+","+POSTCONTENT+" from blog";

请记住,准备好的语句是针对值而不是查询参数,对于它们我们只使用连接。

答案 2 :(得分:0)

试试这个:

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

无需使用字段名称作为参数。