将JDateChooser与数据库一起使用时出现的java问题
我有一个机场项目。我有一个gui,我想在其中搜索某些航班。在这个gui中,我有一个JDateChooser(因为我想在数据库中找到某个航班)。在数据库中,我有一个名为date_dep的列,它是一种数据类型。我应该提到,以前我必须创建航班(在数据库中输入gui中的航班信息),当我输入从JDateChooser获得的日期到数据库时,我没有遇到任何问题。现在的问题是,当我尝试搜索某个航班时,会出现以下错误:
org.postgresql.util.PSQLException: ERROR: syntax error at or near "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错误,但我不知道如何修复它
组织。postgresql。util。PSQLException:没有为参数1指定值
我的错误是,我在设置值之前执行了查询。我现在工作。多谢各位
# 1 楼答案
检查^{} 文档,了解如何正确使用它
您应按以下方式填写您的查询-
并将论点设定如下—
请注意,目前您甚至没有将参数括在引号中。正确编写的查询类似于
... where col1 = 'val1' and col2 = 'val2' ...
当你做一些类似
... "AND date_dep="+dateCh.getDate() ...
的事情时,这相当于做..."AND date_dep="+dateCh.getDate().toString()...
。最终会产生类似... AND date_dep=Apr ...
的结果# 2 楼答案
有几件事:
不要附加字符串以将参数放入查询中。在查询中放置占位符,然后绑定参数
执行从日期选择器构造日期对象所需的任何操作,然后将其绑定到相应的查询占位符(请参见#1)
注意日期的时间部分。如果只关心日期而不关心时间,请始终将日期的时间部分设置为0。如果您使用时间存储日期,但仅按日期查询,则必须查询日期在前一日期大于午夜且在所述日期小于午夜的航班