java.sql.SQLDataException: ORA-01861: 文字与格式字符串不匹配

本文分享了在Java中使用SQL查询时遇到的日期参数不被正确识别的问题及解决方案。通过将日期字符串转换为TO_DATE格式,成功解决了查询错误,确保了基于日期的查询能够正确执行。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

如下图:

遇到这种问题是我日期直接手动插入不识别出现的bug。

正确的解决方式:

结果发现不是这个原因,哈哈哈。

我改了多次发现还是不行

String sql="SELECT ORDERTIME_ID,USER_ID,ORDER_DATE,ORDER_HOUR FROM T_ORDERTIME WHERE USER_ID=?"
				+ " AND ORDER_DATE= ? ";

 

 后来使用了to_char去转换日期,还是不行,忘了截图了。

最后改可以了,是这样的:

String sql="SELECT ORDERTIME_ID,USER_ID,ORDER_DATE,ORDER_HOUR FROM T_ORDERTIME WHERE USER_ID=?"
				+ " AND ORDER_DATE= TO_DATE(?,'yyyy-mm-dd')";

具体是这样的:

接口:

 //根据咨询师ID和日期,查出可预约时间
   public List<OrderTime> queryOrderTime(int userId,String orderDate);

实现类:

@Override
	public List<OrderTime> queryOrderTime(int userId, String orderDate) {
		PreparedStatement ps=null;
		ResultSet rs = null;
		Connection conn = null;
		List<OrderTime> orderTimeList=new ArrayList<OrderTime>();
		String sql="SELECT ORDERTIME_ID,USER_ID,ORDER_DATE,ORDER_HOUR FROM T_ORDERTIME WHERE USER_ID=?"
				+ " AND ORDER_DATE= TO_DATE(?,'yyyy-mm-dd')";
		try {
			conn = DBUtil.getConnection();
			ps= conn.prepareStatement(sql);
			ps.setInt(1, userId);
			ps.setString(2,orderDate);
			rs = ps.executeQuery();
			while(rs.next()) {
				int ordertimeId=rs.getInt("ORDERTIME_ID");
				int userid=rs.getInt("USER_ID");
				String orderdate=rs.getString("ORDER_DATE");
				int orderHour=rs.getInt("ORDER_HOUR");
				OrderTime temp=new OrderTime(ordertimeId,userid,orderdate,orderHour);
				orderTimeList.add(temp);			
			}
		} catch (SQLException e) {
			e.printStackTrace();
		}finally {
			DBUtil.closeConn(conn, ps, rs);
		}
		return orderTimeList;
	}

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值