package test;
import org.junit.Test;
import utils.JDBCUtils;
import java.sql.*;
import java.text.SimpleDateFormat;
/**
* @author YIMENG
* @creat 2022-04-18 13:32
* @Desciption:
*
* 关于java的日期与数据库的日期问题
* 1.数据库中的date是sql.date,在创建javabean时可以将属性声明为sql.date类型
* 2.在向数据库存储date1时,此时的date1可能是util.date,而数据库中是sql.date/DATETIME
* 此时,可以考虑将date1按照“yyyy-MM-dd HH:mm:ss”的格式格式化成字符串,之后保存到数据库中,
* 由于数据库有隐式转换功能,可以将满足此格式的字符串隐式转换为对应的sql.date/DATETIME类型
* 3.若数据库中存储的是DATETIME类型,在jdbc读取时,不能使用resultSet.getDate(...)/resultSet.getTime(...)
* 前者不包括时间,后者不包括日期
* 应使用resultSet.getTimestamp(...)返回值类型为java.sql.Timestamp!!!
*/
public class DateQuestion {
@Test
public void test1(){
java.util.Date date = new java.util.Date();
System.out.println(date);
SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
String dateStr = sdf.format(date);
System.out.println(dateStr);
String sql = "insert into dates values(?)";
//自己写的通用增删改方法,数据库的连接,关闭都包含在内
JDBCUtils.update(sql,dateStr);
}
@Test
public void test2(){
Connection conn = null;
PreparedStatement ps = null;
ResultSet rs = null;
try {
//1.获取数据库连接(封装好的获取链接的方法)
conn = JDBCUtils.getConnection();
//2.预编译sql获取PrepareStatement实例
String sql = "select my_date from dates";
ps = conn.prepareStatement(sql);
//3.执行,并获取结果集
rs = ps.executeQuery();
//4.处理结果集
if(rs.next()){
// Date my_date = rs.getDate("my_date");
Timestamp my_date = rs.getTimestamp("my_date");
System.out.println(my_date);
}
} catch (Exception e) {
e.printStackTrace();
} finally {
//5.关闭资源
JDBCUtils.closeResource(conn,ps,rs);
}
}
@Test
public void test3(){
String sql = "insert into dates values(?)";
JDBCUtils.update(sql,"0000-00-00 00:00:00");
}
}
数据表内容