我正在开发一个从本地数据库中提取数据的简单应用程序。当我将字符串用于 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/