• 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即可。

  • 相关阅读:
    TCP并发服务器(一)——每个客户一个子进程
    TCP并发服务器(六)——创建线程池,每个线程accept,accept使用互斥锁保护——基于UNP代码
    TCP并发服务器(七)——可动态增减的线程池,主线程accept——基于UNP代码修改
    STL源码之vector
    coffee-script安装
    Python模块包中__init__.py文件的作用
    原型模式
    facade模式
    类继承模式
    备忘模式
  • 原文地址:https://www.cnblogs.com/dcy521/p/14729199.html
Copyright © 2020-2023  润新知