我有一个带有PreparedStatement的方法
public static boolean TSTHolidayPrepMapper(PreparedStatement st, TSTObject item, MapperType type) throws SQLException
{
TSTHoliday hol = (TSTHoliday) item;
int id = 1;
if (type != MapperType.DELETE)
{
st.setString(id++, hol.getCountry());
st.setString(id++, hol.getCommodity());
st.setString(id++, hol.getMarketArea());
st.setString(id++, hol.getMarketPlace());
st.setString(id++, hol.getName());
st.setDate(id++, hol.getCalenderDate());
}
if (type != MapperType.INSERT)
st.setInt(id++, hol.getId());
return true;
}
期望在st.setDate(id++, hol.getCalenderDate())
上使用Date类型的对象,但是getCalenderDate()方法提供了一个我自己创建的名为TSTLocalDate的类的对象
public class TSTLocalDate extends TSTObject
{
public int year;
public int month;
public int day;
public TSTLocalDate()
{
this.year = 1900;
this.month = 1;
this.day = 1;
}
public TSTLocalDate(int year, int month, int day)
{
this.year = year;
this.month = month;
this.day = day;
}
public String toString()
{
String val = "" + year + "-" + TSTStringFormatter.getIntWithLeadingZeros(month, 2) + "-" + TSTStringFormatter.getIntWithLeadingZeros(day, 2);
return val;
}
}
我考虑过两种不同的解决方案
我尝试将TSTLocalDate calenderDate转换为Date calenderDate,但由于不推荐使用Date类方法,因此它似乎无法正常工作
@SuppressWarnings({ "deprecation"})
public Date tstlocaldateToDate(TSTLocalDate tstlocaldate) throws ParseException {
Date date = new Date(0);
date.setYear(tstlocaldate.year);
date.setMonth(tstlocaldate.month);
date.setDate(tstlocaldate.day);
Log.info(date.getYear());
return date;
}
st.setTSTLocalDate(id++, hol.getCalenderDate());
之类的PreparedStatement,但可惜的是我没有找到一种方法。< / li>
我希望使用第二种解决方案,但我也愿意接受其他解决方案。
答案 0 :(得分:3)
...但由于不推荐使用Date类方法,因此似乎无法正常工作。
如果您查看JavaDoc的弃用消息,it tells you what to do:
已弃用。
从JDK 1.1版开始,由
Calendar.set(Calendar.YEAR, year + 1900)
替换。
(我强调第二段)
所以旧的方法是:
getInstance
或其重载之一获取Calendar
。Calendar
的方法设置正确的日期。getTime
获取该日期的Date
实例。java.sql.Date
构造函数,传入Date
的{{1}}。getTime()
一起使用。这就是说,对于现代JDK,您可能想要遍历java.time
类(可能是LocalDate
)来进行转换,因为它相当简单。然后,您将使用java.sql.Date.valueOf(LocalDate)
:
PreparedStatement