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

标签 java mysql

我正在开发一个从本地数据库中提取数据的简单应用程序。当我将字符串用于 SQL 查询时,下面的代码工作正常,但我无法让它与 PreparedStatement 一起工作。我已经查看了此处发布的类似问题,但其中大部分是由这样做引起的, preparedStmt.executeQuery(query);而不是这个 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”) from blog 附近使用的正确语法

最佳答案

准备好的语句中的参数用于值 - 您正试图使用​​它们来选择字段。他们只是不那样工作。

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

关于从 MySql 数据库读取时出现 Java Preparedstatement 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43211066/

相关文章:

java - 在 Android 上请求发帖时出现问题

mysql - Windows 上 heroku 登录的奇怪响应(关于 MySQL)(关闭)

php - 无法通过jquery ajax向mysql添加内容

MySQL:选择具有计算列最小值的行

php - 需要使用 array_key_exists 从 mysql 获取数据值

java - 什么是Java中的同步上下文

JAVA 从多个 (UDP) 中设置/选择特定 NIC

java - 正则表达式适合所有不以已知后缀列表结尾的字符串(不是字符,而是单词)

java - 为什么 Junit TestRunner 找不到功能?

php - 如何编写 PHP 代码来一次处理一条记录?