Oracle库中userinfo表borth字段是Date类型,age年纪字段是int类型。age字段要根据borth来自动计算
先说一下我遇到的问题:
insert into的时候遇到日期转换类型错误
先看一下我的新增用户的实现类:
1 public boolean addUser(UserInfo user) { 2 boolean flag=false; 3 int userno=this.getMaxUserNo(); 4 //System.out.println(userno); 5 String sql="insert into userinfo(userno,username,name,password,telphone,sex,borth,role," + 6 "createdate,createby,age,useraddress)values(?,?,?,?,?," + 7 "?,to_date(?,'yyyy-mm-dd hh24:mi:ss'),?,to_date(?,'yyyy-mm-dd hh24:mi:ss'),?,?,?)"; 8 SimpleDateFormat sdf =new SimpleDateFormat("yyyy-MM-dd HH:mm:ss"); 9 Date date =new Date(); 10 String createdate = sdf.format(date); 11 String borth=sdf.format(user.getBorth()); 12 Object[] params={userno+1,user.getUserName(),user.getName(),user.getPassword(),user.getTelphone(),user.getSex(),borth, 13 user.getRole(),createdate,user.getCreateBy(),user.getAge(),user.getUseraddress()}; 14 for (Object object : params) { 15 System.out.println(object.toString()); 16 } 17 System.out.println("addsql=================>"+sql); 18 if(this.getConnection()){ 19 int update = this.executeUpdate(sql, params); 20 System.out.println("addsql2222222222=================>"+sql); 21 if(update>0){ 22 System.out.println("新增成功!"); 23 flag=true; 24 } 25 } 26 this.closeConnection(); 27 return flag; 28 }
注意红色部分:
这是因为我的实体类userinfo.java中定义的数据库这个borth变量是Date类型的
我把user取到的borth的值转换为字符串,因为sql执行的时候to_date里的占位符?要是字符串,所以我上面直接用
sdf.format(user.getBorth());转了。
2、有一个age字段是要自动通过borth和当前年份进行运算得到年龄大小,我写了一个工具类,到时候servlet直接调用即可
工具类:
1 package pb.market.com.cn.util; 2 3 import java.text.SimpleDateFormat; 4 import java.util.Date; 5 6 public class GetAge { 7 public int getage(String borth){ 8 9 SimpleDateFormat sdf =new SimpleDateFormat("yyyy"); 10 //获取当前年 11 String date =sdf.format(new Date()); 12 int day=Integer.parseInt(date); 13 //获取出生日期的年份 14 int bor = Integer.parseInt(borth.substring(0,4)); 15 int age=day-bor; 16 return age; 17 18 } 19 }
servlet调用
总结:中间遇到不少问题,得细心!