1.java.util.Date 和 java.sql.Date 之间的【联系和区别】:
1.1.联系:
二者是【继承关系】:java.lang.Object -> java.util.Date -> java.sql.Date 【java.util.Date 是 java.sql.Date 的父类】(注意拼写)。
1.2.区别:
前者是【常用的表示时间的类】,我们通常【格式化或者得到当前时间】都是用它,后者在【读写数据库】的时候用它,因为 PreparedStament 的 setDate() 的第2参数和ResultSet的getDate()方法的第2个参数都是java.sql.Date 。
2.【具体应用】:
2.1.将java.util.Date 转换为 java.sql.Date
- java.util.Date ud = new Date();
- java.sql.Date sd = new java.sql.Date(ud.getTime());
java.util.Date ud = new Date();
java.sql.Date sd = new java.sql.Date(ud.getTime());
2.2.数据库存储Date:
2.2.1.使用PreparedStatement.setTimestamp(int, java.sql.Timestamp)方法
- public void updateState() {
- try {
- Connection conn = DBManager.getConnection(UserInfo.getDsname());
- String sql = "update db.table set lastlogintime=? where name = ? and password=?";
- PreparedStatement ps = conn.prepareStatement(sql);
- ps.setTimestamp(1, new java.sql.Timestamp(new Date().getTime()));
- ps.setString(2, user.getName());
- ps.setString(3, user.getPassword());
- ps.executeUpdate();
- DBManager.releaseConnection(conn, ps);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
public void updateState() {
try {
Connection conn = DBManager.getConnection(UserInfo.getDsname());
String sql = "update db.table set lastlogintime=? where name = ? and password=?";
PreparedStatement ps = conn.prepareStatement(sql);
ps.setTimestamp(1, new java.sql.Timestamp(new Date().getTime()));
ps.setString(2, user.getName());
ps.setString(3, user.getPassword());
ps.executeUpdate();
DBManager.releaseConnection(conn, ps);
} catch (Exception e) {
e.printStackTrace();
}
}
2.2.2.使用【STR_TO_DATE】函数:
- public void updateState() {
- try {
- Connection conn = DBManager.getConnection(UserInfo.getDsname());
- Statement stmt = conn.createStatement();
- stmt.executeUpdate(("update db.table set lastlogintime =str_to_date('" +
- new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())
- + "','%Y%m%d%H%i%s') where name='nm' and password='pwd'"));
- DBManager.releaseConnection(conn, stmt);
- } catch (Exception e) {
- e.printStackTrace();
- }
- }
public void updateState() {
try {
Connection conn = DBManager.getConnection(UserInfo.getDsname());
Statement stmt = conn.createStatement();
stmt.executeUpdate(("update db.table set lastlogintime =str_to_date('" +
new SimpleDateFormat("yyyyMMddHHmmss").format(new Date())
+ "','%Y%m%d%H%i%s') where name='nm' and password='pwd'"));
DBManager.releaseConnection(conn, stmt);
} catch (Exception e) {
e.printStackTrace();
}
}
2.3.如何将"yyyy-mm-dd"格式的字符串转换为java.sql.Date
方法1.
- public static void main(String[] args) {
- SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd");
- String dateStringToParse = "2007-7-12";
- try {
- java.util.Date date = bartDateFormat.parse(dateStringToParse);
- java.sql.Date sqlDate = new java.sql.Date(date.getTime());
- System.out.println(sqlDate.getTime());
- } catch (Exception ex) {
- System.out.println(ex.getMessage());
- }
- }
public static void main(String[] args) {
SimpleDateFormat bartDateFormat = new SimpleDateFormat("yyyy-MM-dd");
String dateStringToParse = "2007-7-12";
try {
java.util.Date date = bartDateFormat.parse(dateStringToParse);
java.sql.Date sqlDate = new java.sql.Date(date.getTime());
System.out.println(sqlDate.getTime());
} catch (Exception ex) {
System.out.println(ex.getMessage());
}
}
方法2.:
- public static void main(String[] args) {
- String strDate = "2002-08-09";
- StringTokenizer st = new StringTokenizer(strDate, "-");
- java.sql.Date date = new java.sql.Date(
- Integer.parseInt(st.nextToken()), Integer.parseInt(st
- .nextToken()), Integer.parseInt(st.nextToken()));
- }
public static void main(String[] args) {
String strDate = "2002-08-09";
StringTokenizer st = new StringTokenizer(strDate, "-");
java.sql.Date date = new java.sql.Date(
Integer.parseInt(st.nextToken()), Integer.parseInt(st
.nextToken()), Integer.parseInt(st.nextToken()));
}
3.java.sql.Date,java.sql.Time和java.sql.Timestamp 三个类的区别:
3.1.联系:
三个都是java.util.Date的子类
3.2.区别:
java.sql.Date是【日期】,有时候我们要存储的不一定是日期,有可能是【时间】 12:00:00 不带日期,有时候【既需要时间又需要日期】。这正是它们的区别所在:
java.sql.Date -> 日期 -> ps.setDate(2, new java.sql.Date(new Date().getTime()));
java.sql.Time -> 时间 -> ps.setTime(2, new Time(new Date().getTime()));
java.sql.Timestamp -> 日期和时间 -> ps.setTimestamp(2, new java.sql.Timestamp(new Date().getTime()));