我有一个机场项目。我有一个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指定值

不好的是,我在设置值之前执行查询。我现在上班非常感谢你

最佳答案

查看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 ...的内容。

10-07 14:18