【问题标题】:Prepared statements with MySQL?用 MySQL 准备好的语句?
【发布时间】:2013-03-06 21:28:06
【问题描述】:

对于准备好的语句,我在语法上遇到了一些麻烦。

我有以下代码

String query2="SELECT lname FROM school_student WHERE sid = ? ORDER BY sid;";

PreparedStatement ps = cn.prepareStatement(query2);
ps.setInt(1, 3);
ResultSet rs = ps.executeQuery(query2);

我遇到的问题是我收到此错误消息:

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 '? ORDER BY sid' at line 1

但是,当我替换“?”时在我对 3 的查询中,查询工作正常,没有错误,并给了我想要的东西。我如何设置“?”的值似乎有问题。在我的查询中?我是否使用了错误的语法?

【问题讨论】:

    标签: java mysql jdbc prepared-statement


    【解决方案1】:

    简单使用

    ps.executeQuery();
    

    (即使用不带任何参数的重载 executeQuery() 方法)。您在准备语句时已经通过了查询。

    【讨论】:

    • ps.executeQuery() 在他的例子中。
    • 您应该强调这是重载版本。我花了几秒钟才明白你在说什么:)
    • 请注意,结束分号 (;) 也不应该出现在查询中。 MySQL 驱动程序显然允许这样做,但其他 DBMS 可能不允许。
    • @JBNizet- 为什么 mySQL 会在查询中报告错误?知道该错误在哪里出错令人困惑,顺便说一句,我遇到了同样的问题,该问题已通过此答案解决了,thanx
    • @Creator 因为您要求语句执行包含问号的查询,这不是有效的 SQL 查询。使用 executeQuery(sql) 时,SQL 按原样执行。
    【解决方案2】:

    使用这个查询:-

    String query2 = "SELECT lname FROM school_student WHERE sid = "+attribute+" ORDER BY sid;";

    并简单地使用

    ps.executeQuery();

    【讨论】:

      【解决方案3】:

      我认为他们在准备查询时是语法问题 试试这个... String query2="SELECT lname FROM school_student WHERE sid = +variablename+ ORDER BY sid;"

      【讨论】:

        猜你喜欢
        • 2011-09-16
        • 2012-12-18
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多