Java的Date对象与数据库Date对象互转

本文探讨如何在Java中将util.Date转换为sql.Date,反之亦然。特别指出,当查询数据库中某一时间段的数据时,数据库字段必须是Date类型。以MySQL为例,DateTime类型在数据库查询有效,但在Java中可能无法正确查询。通过示例代码,展示了如何进行转换,使得无论数据库字段是Date还是DateTime,查询都能正常进行。

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

 util的Date转sql的Date

    SimpleDateFormat simpleDateFormat = new SimpleDateFormat("yyyy-MM-dd");//转换格式 将符合日期格式的字符串转换成java的Date类型
    java.util.Date  attendanceDate = null;//声明一个Java的Date变量
    java.sql.Date sqlDate  = null;//声明一个数据库的Date变量
    attendanceDate=simpleDateFormat.parse(request.getParameter("leaveDateQuery"));//用声明的Java的Date变量来接收经字符串转换来的日期
    sqlDate = new java.sql.Date (attendanceDate.getTime());//Java的Date对象转为SQL对象

sql的Date转util的Date

    java.sql.Date sqlDate1 = new java.sql.Date(new java.util.Date().getTime());
    System.out.println(sqlDate1);
    java.util.Date utilDate1 = new java.util.Date(sqlDate1.getTime());

注意:如果查询在某一时间段内的数据,数据库中一定要是Date类型,如果是DateTime类型在MySql数据库中能查出来,但是在Java中的查询是查不出来的。

比如:下面代码中画下划线的日期如果是DateTime类型在数据库中查询可以。

 SELECT 
        note.fillInTime, note.noteTypeId,note.startDate,note.endDate, note.isVerify, 
         note.startTime,note.endTime, 
        a.employeeName as employeeName, a.cardNumber, 
        s.employeeName as operatorName, 
        attendancetype.typeName 
        FROM note  
        LEFT OUTER JOIN employees as a  
     on note.employeeId=a.employeeId 
        LEFT OUTER JOIN employees as s  
         on note.operatorId=s.employeeId 
     LEFT OUTER JOIN attendancetype 
        on note.noteTypeId=attendancetype.typeId 
        where 0=0 
        and ( '2019-08-03' >= note.startDate and '2019-08-03' <= note.endDate )
        LIMIT 0,4
        

 在下面这样查如果不是Date类型就查不出来

public ArrayList<Note> queryByKeyWords(Note note, PageUtil pageUtil) {
		// TODO Auto-generated method stub
		StringBuilder sbr = new StringBuilder();
		sbr.append(" SELECT ");
		sbr.append(" note.fillInTime, note.noteTypeId,note.startDate,note.endDate, note.isVerify, ");
		sbr.append(" note.startTime,note.endTime, ");
		sbr.append(" a.employeeName as employeeName, a.cardNumber, ");
		sbr.append(" s.employeeName as operatorName, ");
		sbr.append(" attendancetype.typeName ");
		sbr.append(" FROM note  ");
		sbr.append(" LEFT OUTER JOIN employees as a  ");
		sbr.append(" on note.employeeId=a.employeeId ");
		sbr.append(" LEFT OUTER JOIN employees as s  ");
		sbr.append(" on note.operatorId=s.employeeId  ");
		sbr.append(" LEFT OUTER JOIN attendancetype ");
		sbr.append(" on note.noteTypeId=attendancetype.typeId ");
		sbr.append(" where 0=0 ");
		ArrayList<Object> params = new ArrayList<Object>();
		if(note.getIsVerify()!=null && !note.getIsVerify().equals("")) {
			sbr.append(" and note.isVerify = ? ");
			params.add(note.getIsVerify());
		}
		if( note.getNoteTypeId() != 0 )
		{
			sbr.append(" and note.NoteTypeID = ? ");
			params.add( note.getNoteTypeId());
		}
		
		if( note.getEmployeeName() != null && "".equals(note.getEmployeeName()) == false  )
		{
			sbr.append(" and a.employeeName  like ?  ");
			params.add( "%"+note.getEmployeeName()+"%");
		}
		
		if( note.getOperatorName() != null && "".equals(note.getOperatorName()) == false )
		{
			sbr.append(" and  s.employeeName  like ?  ");
			params.add( "%"+note.getOperatorName()+"%" );
		}
		
		if( note.getAttendanceDate() != null  )
		{
			sbr.append(" and ( ? >= note.startDate and ? <= note.endDate )  ");
			params.add(note.getAttendanceDate());
			params.add(note.getAttendanceDate());
		}
		
		sbr.append(" limit " + pageUtil.getStartIndex() + " , " + pageUtil.getPageSize());
//		ArrayList list = (ArrayList<Note>) dao.query(sbr.toString(), Note.class, params.toArray());
//		String str = JSON.toJSONString(list);
//		System.out.println(str);
		//System.out.println(sbr.toString());
	//	System.out.println(params.toString());
		ArrayList<Note> list=(ArrayList<Note>) dao.query(sbr.toString(), Note.class, params.toArray());
//		System.out.println(list+"111111111111");
		return list;
	}

如果转日期是如下所写,则不用区分数据库中是Date还是DateTime,都可以查出来

            Date sqlDate =null;
			String time = request.getParameter("leaveDateQuery");
		    SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");//yyyy-mm-dd, 会出现时间不对, 因为小写的mm是代表: 秒
		    Date utilDate;
			try {
				utilDate = sdf.parse(time);
			    sqlDate = new java.sql.Date(utilDate.getTime());//
			} catch (ParseException e) {
				// TODO Auto-generated catch block
				e.printStackTrace();
			}
		   

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值