Java -- JDBC学习笔记5、日期格式转换

1、Date工具类

现有问题:在对数据库进行插入数据操作时,如果数据库表中有时间类型的字段,就需要用到PreparedStatement接口中的setDate()方法,但是有一下两个问题:

  • setDate()第二个参数类型是java.sql.Date,而Java编程应用层用的都是java.util.Date类型。
  • 在servlet中接收用户输入的数据类型是字符串类型。

所以当我们用Java应用程序插入时间类型的数据时,需要进行转换。

1.1、java.util.Date

  • Java语言常规应用层面日期类型,可以通过合格的时间字符串转换为java.util.Date。
  • 无法直接通过JDBC插入到数据库中,因为PreparedStetement接口中的setDate()方法参数类型是java.sql.Date.

1.2、java.sql.Date

  • 不可以通过字符串转换为java.sql.Date。只能使用该对象的构造函数,传入毫秒值获得该对象。

1.3、SimpleDateFormat

  • 格式化和解析日期的具体类。
    • 格式化(日期-->文本)Date-->String
    • 解析(文本-->日期)String-->Date
1.3.1、SimpleDateFormat应用
        //创建SimpleDateFormat对象,并且通过构造函数设置日期格式
        SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");

        //创建java.util.Date对象
        Date localDate = new Date();
        //通过format()方法将java.util.Date转为String
        String strDate = sdf.format(localDate);
        //输出:2021-05-04
        System.out.println(strDate);


        //创建字符串
        String str = "2012-01-12";
        //通过parse()方法将String转为Date
        Date dateStr = sdf.parse(str);
        //输出:Thu Jan 12 00:00:00 CST 2012
        System.out.println(dateStr);

2、封装DateUtils工具类

DateUtils中定义三个静态方法和一个SimpleDateFormat对象、方法的功能分别是:

  • String-->java.util.Date:字符串转为java.util.Date
  • java.util.Date-->java.sql.Date:java.util.Date转为java.sql.Date
  • java.util.Date-->String:java.util.Date转换为字符串

2.1、具体实现

  • 创建SimpleDateFormat对象:
private static final SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");
  • 字符串转util.Date
public static Date strToUtilDate(String str)
    {
        try
        {
            return sdf.parse(str);
        }
        catch (ParseException e)
        {
            e.printStackTrace();
        }
        return null;
    }
  • util.Date转sql.Date
public static java.sql.Date utilToSql(Date date)
    {
        return new java.sql.Date(date.getTime());
    }
  • util.Date转string
public static String utilToStr(Date date)
    {
        return sdf.format(date);
    }

3、案列

  • 首先定义一个实体类,里边定义四个个字段、和数据库表中字段相对应。再添加构造方法、get和set方法、重写toString()。字段如下:
private int id;
    private String Account;
    private String Pwd;
    private Date Birthday;
  • 创建servlet,接收用户输入的值,这里写死,主要测试类型转换,如下:
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException
    {
        //假设bornDate为用户输入的日期
        String bornDate = "2000-9-17";

        //调用工具类,将其转为java.util.Date
        Date date = DateUtils.strToUtilDate(bornDate);

        //通过构造方法给属性赋值
        Client client = new Client("169@qq.com", "169",date);

        //调用Service层的ClientService,创建对象
        ClientService clientService = new ClientService();

        //调用AddClient方法,将client对象传入、执行添加操作
        clientService.AddClient(client);
    }
  • 在ClientService中的AddClient()连接数据库、插入数据
public void AddClient(Client client)
    {
        Connection conn = null;
        PreparedStatement statement = null;
        String insertSql = "insert into Client(Account,Pwd,Birthday) values(?,?,?)";
        try
        {
            conn = DBUtils.getConnection();
            statement = conn.prepareStatement(insertSql);
            statement.setString(1, client.getAccount());
            statement.setString(2, client.getPwd());
            //调用工具类,将java.util.Date转为java.sql.Date
            statement.setDate(3, DateUtils.utilToSql(client.getBirthday()));
            int count = statement.executeUpdate();
            System.out.println(count == 1 ? "添加成功" : "添加失败");
        }
        catch (SQLException sqlException)
        {
            sqlException.printStackTrace();
        }
        DBUtils.closeDb(conn, statement, null);
    }

概括来讲、就是接收到用户输入的值后,先转为java.util.Date,添加到数据库时,再转为java.sql.Date即可。

原文地址:https://www.cnblogs.com/dcy521/p/14729199.html