0

我有一个机场项目。我有一个 gui,我想在其中搜索某些航班。在这个 gui 中,我有一个 JDateChooser(因为我想在我的数据库中找到某个航班)。在数据库中,我有一个名为 date_dep 的列,它是一种数据类型。我应该提一下,以前我必须创建航班(将有关航班的信息从 gui 输入到数据库中),当我从 JDateChooser 获得的日期输入数据库时​​,我没有遇到问题。现在的问题是,当我尝试搜索某个航班时,我收到了这个错误:

org.postgresql.util.PSQLException:错误:“Apr”或附近的语法错误

我想“Apr”是从 4 月开始的,因为我正在搜索 4 月 24 日的航班。所以我想我的问题出在格式上,但我尝试了很多东西,但没有任何运气。你知道它可能是什么吗?提前致谢。如果有帮助,我可以发布更多代码。

dateCh 是我的 Jdatechooser 的名称。

尝试 {

        con = DriverManager.getConnection(url, user, password);
        pst = con.prepareStatement("SELECT * FROM flight WHERE route_id="+routeid+ "AND date_dep="+dateCh.getDate());
        rs = pst.executeQuery();

        // erase everything from the list before refreshing it
        flightlist.clear();
        while (rs.next()) {
            flightlist.addElement(rs.getInt(1) + " : Flight ID" + "  |  "
                    + "Route ID: " + rs.getInt(2) + "  |  "+"Date: "+ rs.getDate(4)+ "  |  "+"Time: "+rs.getTime(5)+ "  |  "
                    + "Plane ID "+rs.getInt(3)+ "  |  "+"Economy seats: "+rs.getInt(6)+"  |  "+"Business seats: "+rs.getInt(7)+"  |  "
                    + "First class seats: "+rs.getInt(8)+"\n");
        }

    } catch (SQLException e) {
        System.out.println("Connection failed!");
        e.printStackTrace();
        return;
    }

修复我的代码后

pst = con.prepareStatement("SELECT * FROM flight WHERE route_id=? AND date_dep=?");
        rs = pst.executeQuery();
        pst.setInt(1, routeid);
        pst.setDate(2, sqlDate);

我现在得到这个错误。我在网上发现 postgres 存在某种 og 错误,但我不知道如何修复它。

org.postgresql.util.PSQLException:没有为参数 1 指定值

我的错,我在设置值之前执行了查询。我现在工作。非常感谢

4

2 回答 2

1

一些东西:

  1. 不要附加字符串以将参数放入查询中。在查询中放置占位符,然后绑定参数。

  2. 做任何你需要做的事情来从你的日期选择器构造一个 Date 对象,然后将它绑定到适当的查询占位符(参见#1)

  3. 请注意日期的时间部分。如果您只关心日期而不是时间,请始终将日期的时间部分设置为 0。如果您使用时间存储日期但只是按日期查询,您将不得不查询日期较大的航班早于前一个日期的午夜,并且低于相关日期的午夜。

于 2014-05-03T17:43:09.097 回答
0

查看PreparedStatement有关如何正确使用它的文档。

您应该按如下方式编写查询 -

pst = con.prepareStatement("SELECT * FROM flight WHERE route_id= ? AND date_dep= ?");

并将参数设置如下 -

//pst.setXXX(1, routed); just choose the appropriate type for the route_id column
pst.setDate(2, dateCh.getDate());

请注意,目前您甚至没有将参数括在引号中。正确编写的查询看起来像... where col1 = 'val1' and col2 = 'val2' ....

当你做类似的事情时... "AND date_dep="+dateCh.getDate() ...,这相当于做..."AND date_dep="+dateCh.getDate().toString()...。最终产生类似... AND date_dep=Apr ....

于 2014-05-03T17:39:10.647 回答