【问题标题】:PreparedStatement and LIKE errorPreparedStatement 和 LIKE 错误
【发布时间】:2012-06-01 14:03:15
【问题描述】:

我正在使用jdk 1.7,使用netbeans 7.1.2MySQL 5 在java se 中编写一个简单的应用程序。

但我在下一个代码中有错误:

String sql = "SELECT idpaciente, ap_paterno, ap_materno, nombres, edad, direccion, telefono, descuento, movil, email, docId FROM paciente WHERE ap_paterno LIKE ? ";
pst = con.prepareStatement(sql);

pst.setString(1, paciente.getApellidoPaterno());

ResultSet rs = pst.executeQuery(sql);

这段代码编译得很好,但是执行后,我有语法错误,netbeans说:

您的 SQL 语法有错误;检查手册 对应于您的 MySQL 服务器版本,以便使用正确的语法 靠近 '?'在第 1 行

使用netbeans的调试器,错误在executeQuery中,但我找不到我的错误。

【问题讨论】:

  • 我认为您在 '? 处错过了单引号? '

标签: java mysql prepared-statement


【解决方案1】:

http://www.theserverside.com/discussions/thread.tss?thread_id=33182

上面的链接有一些关于这个话题的讨论。显然,预先准备好的语句不适用于“like”和“in”。

所以问题是准备好的语句无法替换 ?结果查询不正确。您看到的错误直接来自 mysql。

【讨论】:

    【解决方案2】:

    PreparedStatement.executeQuery() 不接受任何参数,但是由于接口继承了Statement.executeQuery(String sql),因此您改为调用它。只需致电:

    ResultSet rs = pst.executeQuery();
    

    【讨论】:

    • 非常感谢。我试试这个,OK。我的应用程序还可以。没错,我在 PreparedStatement.executeQuery 方法中使用了一个参数,这是我的错误。我的问题解决了。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-09-03
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 2014-06-27
    相关资源
    最近更新 更多