我的目标:
实现我的用户的增删查改。
我的数据库:
其中还添加了生日:也就是日期
讲述有关日期的问题:
-
遍历显示的时候(读)
读取 的时候
public List<Student> findAll() { List<Student> list = new ArrayList<>(); Connection conn = DbUtil.getConn(); String sql = "SELECT * FROM tb_student"; try { PreparedStatement pstmt = conn.prepareStatement(sql); ResultSet rs = pstmt.executeQuery(); while(rs.next()){ list.add(new Student(rs.getInt(1),rs.getString(2),rs.getString(3), rs.getString(4),rs.getDate(5),rs.getString(6),rs.getString(7))); } } catch (SQLException e) { // TODO Auto-generated catch block e.printStackTrace(); } return list; }
刚开始的时候一直用:getString() 不知道有getDate方法-----------------------》严肃.jpg学到惹
----------》翻资料还有一些与时间相关的
rs.getDate()-------------------返回日期部分 java.sql.Date ----------------- 2018-18-18
rs.getTime() --------------------返回时间部分 java.sql.Time ----------------- 21:28:18
rs.getTimestamp()-------------返回时间和日期 java.sql.Timestamp-------- 2018-18-18 21:28:18
虽然我的Student类里Date是 java.util.Date 但我发现好像没毛病 == 一样正确的显示到界面上了
之后便是添加:
头疼:因为一直无法存进去 setDate(4,stu.getBirth())------因为setDate是sql.Date 而我的stu.getBirth() 一直是util.Date
@Override
public void addStudent(Student stu) {
// TODO Auto-generated method stub
List<Student> list = new ArrayList<>();
Connection conn = DbUtil.getConn();
String sql = "INSERT INTO tb_student (sname,gender,tele,birth,hobby,info) VALUES(?,?,?,?,?,?)";
try {
PreparedStatement pstmt = conn.prepareStatement(sql);
pstmt.setString(1, stu.getSname());
pstmt.setString(2, stu.getGender());
pstmt.setString(3, stu.getTele());
pstmt.setDate(4, new java.sql.Date(stu.getBirth().getTime()));
pstmt.setString(5, stu.getHobby());
pstmt.setString(6, stu.getInfo());
pstmt.executeUpdate();
} catch (SQLException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
解决办法:
Step 1:
从jsp获取name="birth"的时候就完成过1次转换 :因为 void addStudent(Student stu) 函数传参为Student类
所以 在Servlet层传递它的时候就要完成建立stu对象:获取的日期从String->Date(util.Date)类
birthstr= request.getParamater("birth"); Date birth = new SimpleDateFormat("yyyy-MM-dd").parse(birthstr);
尝试过的人都懂:birth格式 ----- Fri Dec 25 00:00:00 CST 1998 没事!就使用这种Date格式继续new Student
Step 2:
有了stu对象传入了上面那个存数据库得代码(addStudent(stu))中,
stu.getBirth() 获取stu的birth; 虽然是上面那种格式
.getTime() 获取Date(util.Date)的日期!-----成功转换为 1998-12-25
new java.sql.Date(stu.getBirth().getTime()) ---- 转换为Date(sql.Date)
pstmt.setDate(4,new java.sql.Date(stu.getBirth().getTime()) ); 放到第四个位置!!!完成!