最近在做人事管理系统,优化数据库后,想在数据库中只存有身份证号就可以自动显示出生日期和年龄。
JavaBean代码:
private int person;
private String IDNumber;
private Date birthday;//通过身份证号码获取出生日期
private int age;//通过出生日期获取年龄
public String getIDNumber() {
return IDNumber;
}
public void setIDNumber(String iDNumber) {
IDNumber = iDNumber;
}
public Date getBirthday() {
return birthday;
}
public void setBirthday(Date birthday) {
try {
/*SimpleDateFormat()方法 降字符串类型转换为Date类型*/
/*parse()方法 提取租字符串8-14为出生日期 返回值类型为String*/
this.birthday = new SimpleDateFormat("yyMMdd").parse(this.IDNumber.substring(8, 14));
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
public int getAge() {
return age;
}
public void setAge(int age) {
Date nowTime = new Date(System.currentTimeMillis());//获取系统当前时间
this.age = nowTime.getYear() - this.birthday.getYear();
}
在做数据查询时只能查询IDNumber,如果查询其他的用getInt(“age”)和getDate(“birthady”)方法数据库系统就会抛出异常
因为数据库字段就没没有出生日期和年龄这两列,所以Result中就不能用get方法获取。
正确做应该是:
public ElderMessage selPseson() {
// TODO Auto-generated method stub
ElderMessage em = null;
String sql = "select * from person;
conn = this.getConnection();
try {
pstmt = conn.prepareStatement(sql);
rs = pstmt.executeQuery();
while (rs.next()){
em = new ElderMessage();
em.setIDNumber(rs.getString("IDNumber"));// 用get方法获取Result中的信息
em.setBirthday(em.getBirthday());//调用JavaBean中的setBirthday()方法初始化出生日期,调用get方法作为getBirthday()方法的引用参数
em.setAge(em.getAge());
}
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
return em;
}
JavaBean不需要和数据库中的字段完全相同,一定情况通过重写set()方法可以让程序富有更大的变化。身份证号不仅仅可以计算出出生日期和年龄,还可以有更多的计算方法,当我用到比较健壮和完善的系统时,可以用这样的方法进行重写,不仅减小了数据库的负担,而且提高了数据灵活性。但计算量增加会影响程序的运速度,在同一体统中考虑JavaBean的应用范围,尽量减少计算次数,提高应用效率:或是在数据库库管理软件中创建视图,在这没有行那方面深入探讨,各路大神是否有更加的解决方案,希望多多留言。