涉及到两个类:java.util.Date,java.sql.Date(和数据库编程有关)。
其中java.sql.Date继承自java.util.Date。两者的区别是,前者既有日期又有时间,而后者仅有日期。
1.java.util.Date的常用构造方法如下:利用SimpleDateFormat可以对Date进行任意形式的格式化
●new Date()
●new Date(long date) 通常可以这样用:new java.util.Date(System.currentTimeMillis())
2.java.sql.Date的常用构造方法如下:
●new Date(long date) 通常可以这样用:new java.util.Date(System.currentTimeMillis())
三层架构中,JDBC属于数据访问层,专门用来处理数据,为上一层代码(业务逻辑层)提供服务,而业务逻辑层一般不与SQL打交道,它不会用到java.sql.Date,而只会使用java.util.Date,所以这就涉及到java.util.Date与java.sql.Date类型的转换。
需要说明的是:java.sql.Time也继承自java.util.Date.
现在以简单的代码模拟上面所说的转换。
package cn.itcast.jdbc;
import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
public class DateTest {
public static void main(String[] args) throws SQLException {
Date d = read(7);//取得第七条记录的生日
System.out.println(d);
}
static java.util.Date read(int id) throws SQLException {//读取时间
Connection conn = null;
Statement st = null;
ResultSet rs = null;
java.util.Date birthday = null;
try {
// 2.建立连接
conn = JdbcUtils.getConnection();//JdbcUtils为JDBC工具类
// 3.创建语句
st = conn.createStatement();
// 4.执行语句
rs = st.executeQuery("select birthday from user where id=" + id);
// 5.处理结果
while (rs.next()) {
//birthday = new Date(rs.getDate("birthday").getTime());
birthday = rs.getDate("birthday");//两种形式都可以,rs.getDate()返回的是java.sql.Date,子类可以直接赋值给父类
}
} finally {
JdbcUtils.free(rs, st, conn);
}
return birthday;
}
static void create(String name, java.util.Date birthday, float money)
throws SQLException {
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
// 2.建立连接
conn = JdbcUtils.getConnection();
// conn = JdbcUtilsSing.getInstance().getConnection();
// 3.创建语句
String sql = "insert into user(name,birthday, money) values (?, ?, ?) ";
ps = conn.prepareStatement(sql);
ps.setString(1, name);
ps.setDate(2, new java.sql.Date(birthday.getTime()));//核心代码,ps.setDate()所需要传入的是java.sql.Date
ps.setFloat(3, money);
// 4.执行语句
int i = ps.executeUpdate();
System.out.println("i=" + i);
} finally {
JdbcUtils.free(rs, ps, conn);
}
}
}