【问题标题】:SQL statement syntax errorSQL 语句语法错误
【发布时间】:2012-02-12 02:37:25
【问题描述】:

使用 sql 语句检索两个时间戳之间的记录时遇到问题。这只是给了我一个 NullPointerException,我认为这只是一个语法错误,我一直在四处寻找,但我找不到任何东西。这是声明:

private static final String strGetRecordByDate =
    "SELECT * FROM APP.MYTABLE " +
    "WHERE MYDATE >= ?, AND MYDATE <= ? " +
    "VALUES (?, ?)";

创建语句:

stmtGetRecordByDate = dbConnection.prepareStatement(strGetRecordByDate);

stmtGetRecordByDate.clearParameters() 上显示空指针异常:

public Vector getRecordByDate(Date datefrom, Date dateto){
    Vector<String> records = new Vector<String>();
    ResultSet results = null;
    java.sql.Date sqlDatefrom = new java.sql.Date(datefrom.getTime());
    java.sql.Date sqlDateto = new java.sql.Date(dateto.getTime());
    try {           
        stmtGetRecordByDate.clearParameters();
        stmtGetRecordByDate.setDate(1, sqlDatefrom);
        stmtGetRecordByDate.setDate(2, sqlDateto);
        results = stmtGetRecordByDate.executeQuery();
        while (results.next()) {
            int id = results.getInt(1);
            String entry = results.getString(2);
            records.add(entry);
        }
    } catch(SQLException sqle) {
        sqle.printStackTrace();
    }
    return records;
}

其余的查询和语句工作正常,所以我知道数据库本身很好,只是这个有问题。

任何建议都会很棒。 谢谢!

【问题讨论】:

    标签: java sql syntax


    【解决方案1】:

    您不能在该上下文中使用VALUES,并且您的 WHERE 子句中有一个杂散的逗号;你想要这个:

    private static final String strGetRecordByDate =
            "SELECT * FROM APP.MYTABLE " +
            "WHERE MYDATE >= ? AND MYDATE <= ?";
    

    你也可以使用BETWEEN:

    private static final String strGetRecordByDate =
            "SELECT * FROM APP.MYTABLE " +
            "WHERE MYDATE BETWEEN ? AND ?";
    

    但这只是风格问题。

    我不确定 Java 方面的情况,但由于您的 SQL 无效,您可能会在 stmtGetRecordByDate 中获得 null

    【讨论】:

    • 哈哈是的,对不起,流浪者,不是在代码中只是一个错误类型。 WHERE BETWEEN 工作完美,谢谢
    • 不能使用VALUES时如何使用参数?
    • @stroduces:您的 stmtGetRecordByDate.setDate 调用绑定值到占位符。 VALUES 通常只与 INSERT 一起使用。
    • 奇怪,它不再给出错误但输出向量总是空的,但我知道那里应该有值。嗯。好吧,您的陈述是正确的,我认为我的代码中存在缺陷。谢谢!
    • @stroduces 要补充@mu 已经提到的内容,将values() 与SELECT 语句一起使用在语法上是不正确的。这 '?'在您的 SELECT 语句中是用于为您的 PreparedStatement 中的参数设置值的内容。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-05-25
    • 2013-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多