zoukankan      html  css  js  c++  java
  • 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即可。

  • 相关阅读:
    leetcode108 Convert Sorted Array to Binary Search Tree
    leetcode98 Validate Binary Search Tree
    leetcode103 Binary Tree Zigzag Level Order Traversal
    leetcode116 Populating Next Right Pointers in Each Node
    Python全栈之路Day15
    Python全栈之路Day11
    集群监控
    Python全栈之路Day10
    自动部署反向代理、web、nfs
    5.Scss的插值
  • 原文地址:https://www.cnblogs.com/dcy521/p/14729199.html
Copyright © 2011-2022 走看看