JDBC入门十一:JDBC中的Date日期的处理方式;(包括读取和更新)(这是一个零散的知识点,较重要!)

本文主要是介绍JDBC入门十一:JDBC中的Date日期的处理方式;(包括读取和更新)(这是一个零散的知识点,较重要!),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本篇博客的代码沿用上篇博客JDBC入门十:基于JavaBean实体类,实现分页数据封装;中的代码;

一.数据库中日期类型说明:

(1)MySQL中date和datetime类型是可兼容的;(2)java程序给数据库的日期字段赋值的时候,只有setDate()方法,而没有setDateTime()方法


 二:从数据库中读取日期数据

1.首先,在JavaBean:Employee类中,添加日期属性hiredate:类型是java.util.Date

2.然后,在PaginationCommand类中添加:数据库中获取的日期类型是java.sql.Date

同时,在employee属性赋值的时候:

这是因为:java.sql包下的Date类型,继承自,java.util包下的Date类型:所以,在进行数据提取的时候,这两者是互相兼容的


上面读取的过程,实际是把从数据库读到的java.sql.Date类型,赋值给java.util.Date类型;因为java.sql.Date类型继承自java.util.Date类型,所以这个是没有问题的。

三: 向数据库中添加日期数据

那么再向数据库表中更新数据的时候,怎么处理?

比如从前端传过来一个日期变量,大概率是String字符串,这个日期字符串如何存储到数据库中?

InsertCommand类:

package com.imooc.jdbc.hrapp.command;import com.imooc.jdbc.common.DbUtils;import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.SQLException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Scanner;public class InsertCommand implements Command{@Overridepublic void execute() {Scanner in = new Scanner(System.in);System.out.println("请输入员工编号:");int eno = in.nextInt();System.out.println("请输入员工姓名");String ename = in.next();System.out.println("请输入员工薪资:");Float salary = in.nextFloat();System.out.println("请输入隶属部门:");String dname = in.next();System.out.println("请输入入职日期:");String strHiredate = in.next();// String类型到java.sql.Date,分两步//1.String转为java.util.Date;java.util.Date udHiredate = null;SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd");try {udHiredate = sdf.parse(strHiredate);} catch (ParseException e) {e.printStackTrace();}//2.将java.util.Date转为java.sql.Date;Long time = udHiredate.getTime();//getTime()方法是获取从1970年到现在的毫秒数;java.sql.Date sdHiredate = new java.sql.Date(time);//java.sql.Date支持在构造函数中传入一个1970年的毫秒数的;Connection conn = null;PreparedStatement pstmt = null;try {conn = DbUtils.getConnection();String sql = "insert into employee(eno,ename,salary,dname,hiredate) values(?,?,?,?,?)";pstmt = conn.prepareStatement(sql);pstmt.setInt(1,eno);pstmt.setString(2,ename);pstmt.setFloat(3, salary);pstmt.setString(4, dname);pstmt.setDate(5,sdHiredate); // java.sql.Dateint cnt = pstmt.executeUpdate();System.out.println(cnt);System.out.println(dname+"员工入职手续已办理。");} catch (SQLException e) {e.printStackTrace();} catch (ClassNotFoundException e) {e.printStackTrace();}finally {DbUtils.closeConnection(null, pstmt, conn);}}
}

 核心就是:先把日期字符串转成java.util.Date格式;然后获得时期的毫秒数;然后把毫秒数转成java.sql.Date格式。

 

 

 

 

这篇关于JDBC入门十一:JDBC中的Date日期的处理方式;(包括读取和更新)(这是一个零散的知识点,较重要!)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/322875

相关文章

Spring Security 从入门到进阶系列教程

Spring Security 入门系列 《保护 Web 应用的安全》 《Spring-Security-入门(一):登录与退出》 《Spring-Security-入门(二):基于数据库验证》 《Spring-Security-入门(三):密码加密》 《Spring-Security-入门(四):自定义-Filter》 《Spring-Security-入门(五):在 Sprin

无人叉车3d激光slam多房间建图定位异常处理方案-墙体画线地图切分方案

墙体画线地图切分方案 针对问题:墙体两侧特征混淆误匹配,导致建图和定位偏差,表现为过门跳变、外月台走歪等 ·解决思路:预期的根治方案IGICP需要较长时间完成上线,先使用切分地图的工程化方案,即墙体两侧切分为不同地图,在某一侧只使用该侧地图进行定位 方案思路 切分原理:切分地图基于关键帧位置,而非点云。 理论基础:光照是直线的,一帧点云必定只能照射到墙的一侧,无法同时照到两侧实践考虑:关

基本知识点

1、c++的输入加上ios::sync_with_stdio(false);  等价于 c的输入,读取速度会加快(但是在字符串的题里面和容易出现问题) 2、lower_bound()和upper_bound() iterator lower_bound( const key_type &key ): 返回一个迭代器,指向键值>= key的第一个元素。 iterator upper_bou

poj3468(线段树成段更新模板题)

题意:包括两个操作:1、将[a.b]上的数字加上v;2、查询区间[a,b]上的和 下面的介绍是下解题思路: 首先介绍  lazy-tag思想:用一个变量记录每一个线段树节点的变化值,当这部分线段的一致性被破坏我们就将这个变化值传递给子区间,大大增加了线段树的效率。 比如现在需要对[a,b]区间值进行加c操作,那么就从根节点[1,n]开始调用update函数进行操作,如果刚好执行到一个子节点,

hdu1394(线段树点更新的应用)

题意:求一个序列经过一定的操作得到的序列的最小逆序数 这题会用到逆序数的一个性质,在0到n-1这些数字组成的乱序排列,将第一个数字A移到最后一位,得到的逆序数为res-a+(n-a-1) 知道上面的知识点后,可以用暴力来解 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#in

hdu1689(线段树成段更新)

两种操作:1、set区间[a,b]上数字为v;2、查询[ 1 , n ]上的sum 代码如下: #include<iostream>#include<algorithm>#include<cstring>#include<stack>#include<queue>#include<set>#include<map>#include<stdio.h>#include<stdl

内核启动时减少log的方式

内核引导选项 内核引导选项大体上可以分为两类:一类与设备无关、另一类与设备有关。与设备有关的引导选项多如牛毛,需要你自己阅读内核中的相应驱动程序源码以获取其能够接受的引导选项。比如,如果你想知道可以向 AHA1542 SCSI 驱动程序传递哪些引导选项,那么就查看 drivers/scsi/aha1542.c 文件,一般在前面 100 行注释里就可以找到所接受的引导选项说明。大多数选项是通过"_

hdu 1754 I Hate It(线段树,单点更新,区间最值)

题意是求一个线段中的最大数。 线段树的模板题,试用了一下交大的模板。效率有点略低。 代码: #include <stdio.h>#include <string.h>#define TREE_SIZE (1 << (20))//const int TREE_SIZE = 200000 + 10;int max(int a, int b){return a > b ? a :

数论入门整理(updating)

一、gcd lcm 基础中的基础,一般用来处理计算第一步什么的,分数化简之类。 LL gcd(LL a, LL b) { return b ? gcd(b, a % b) : a; } <pre name="code" class="cpp">LL lcm(LL a, LL b){LL c = gcd(a, b);return a / c * b;} 例题:

【生成模型系列(初级)】嵌入(Embedding)方程——自然语言处理的数学灵魂【通俗理解】

【通俗理解】嵌入(Embedding)方程——自然语言处理的数学灵魂 关键词提炼 #嵌入方程 #自然语言处理 #词向量 #机器学习 #神经网络 #向量空间模型 #Siri #Google翻译 #AlexNet 第一节:嵌入方程的类比与核心概念【尽可能通俗】 嵌入方程可以被看作是自然语言处理中的“翻译机”,它将文本中的单词或短语转换成计算机能够理解的数学形式,即向量。 正如翻译机将一种语言