我最近在Java PreparedStatements中遇到了这个问题。我有以下代码:
String selectSql1
= "SELECT `value` FROM `sampling_numbers` WHERE `value` < (?)" ;
ResultSet rs1 = con.select1(selectSql1,randNum);
其中select1
方法是
public ResultSet select1(String sql, int randNum) {
try {
this.stmt = con.prepareStatement(sql);
stmt.setInt(1, randNum);
return this.stmt.executeQuery(sql);
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
但是,它一直抛出这个错误:
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 '?)' at line 1
at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
at com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
at com.mysql.jdbc.Util.getInstance(Util.java:386)
at com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4237)
at com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:4169)
at com.mysql.jdbc.MysqlIO.sendCommand(MysqlIO.java:2617)
at com.mysql.jdbc.MysqlIO.sqlQueryDirect(MysqlIO.java:2778)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2828)
at com.mysql.jdbc.ConnectionImpl.execSQL(ConnectionImpl.java:2777)
at com.mysql.jdbc.StatementImpl.executeQuery(StatementImpl.java:1651)
at util.P_DBCon.select1(P_DBCon.java:59)
at app.RandomNumberGenerator.main(RandomNumberGenerator.java:60)
Exception in thread "main" java.lang.NullPointerException
at app.RandomNumberGenerator.main(RandomNumberGenerator.java:64)
当我以幼稚的方式做“...值时,这个问题不会发生
非常感谢任何帮助。
我尝试了社区的各种建议,比如
String selectSql1
= "SELECT `value` FROM `sampling_numbers` WHERE value < ?" ;
String selectSql1
= "SELECT value FROM sampling_numbers WHERE value < ?" ;
仍然会出现错误消息。
public ResultSet select1(String sql, int randNum) {
try {
this.stmt = con.prepareStatement(sql);
stmt.setInt(1, randNum);
return this.stmt.executeQuery();
} catch (SQLException e) {
e.printStackTrace();
return null;
}
}
参考请参见下面的代码
PreparedStatement statement = con.prepareStatement("SELECT EMP_ID,EMP_PWD FROM employee " +
"WHERE EMP_ID = '"+param1+"'");
ResultSet result = statement.executeQuery();
你的问题的解决方案其实很简单,你是调用Statement.executeQuery(String),当你想调用准备tatement.executeQuery()-
this.stmt = con.prepareStatement(sql); // Prepares the Statement.
stmt.setInt(1, randNum); // Binds the parameter.
// return this.stmt.executeQuery(sql); // calls Statement#executeQuery
return this.stmt.executeQuery(); // calls your set-up PreparedStatement
问题内容: 这个问题已经在这里有了答案 : MySQLSyntaxErrorException在“?”附近 尝试执行PreparedStatement时 (2个答案) 5年前关闭。 我使用PreparedStatements准备查询,当我使用condition参数对查询进行硬编码时,它运行良好。 但如果从setString()方法传递参数,则会抛出错误。 在错误日志中,我的查询上方看起来不错。 P
问题内容: 我收到错误消息 “您的SQL语法有错误;请检查与您的MySQL服务器版本相对应的手册,以找到在第1行的“ orderr”附近使用的正确语法” -因此,我认为错误是用了两个 ‘, 但是在我的代码中我没有用 ‘ 。注意,该表实际上被命名为订购者。 问题答案: 在大多数数据库中,您无法参数化表名称之类的对象名称,在MySQL中,理论上您可以做到,因为默认情况下,MySQL Connector
我试图使用servlet将行插入到表中,当尝试使用语句(使用insertQuery1和insertQuery2)进行插入时,它执行良好,但当使用preparedstatment(使用insertPrepQuery)执行时,它抛出SQL语法错误。代码: 错误:
问题内容: 这真让我发疯……我在这里做错了什么? 结果是… 02:59:12,885错误[STDERR] com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException:您的SQL语法有错误;检查与您的MySQL服务器版本相对应的手册以获取正确的语法,以在第1行的“ password” varchar(100)”附近使用 但… 完美运行…直接在M
主要内容:1. Statement对象,2. PreparedStatement对象,3. CallableStatement对象,关闭CallableStatement对象当获得了与数据库的连接后,就可以与数据库进行交互了。 JDBC ,和接口定义了可用于发送SQL或PL/SQL命令,并从数据库接收数据的方法和属性。 它们还定义了有助于在Java和SQL数据类型的数据类型差异转换的方法。 下表提供了每个接口定义,以及使用这些接口的目的的总结。 接口 推荐使用 用于对数据库进行通用访问,在运行时
问题内容: 我想知道有什么区别,何时使用,和。 每种方法的最佳实践和典型方案是什么? 问题答案: 声明与PreparedStatement 使用PreparedStatement可以提高性能,但它取决于数据库。 使用PreparedStatement可以避免SQL注入。PreparedStatement如何避免或阻止SQL注入? 使用setInt,setString和prepareStatemen