一、时间分类

  数据库     java类

  Date  ---- java.sql.Date   表示日期 yyyy-MM--dd (年月日)

  Time  ----java.sql.Time    表示时间 hh--mm--ss(时分秒)

  Timestamp ---- java.sql.Timestamp  表示日期+时间  yyyy--MM--dd hh--mm-ss(年月日时分秒)

  

  接下来我们重新创建一个test_date表,其中字段名称及类型如上图所示。

  建表语句:

CREATE TABLE `test_date` (
`date` date DEFAULT NULL,
`time` time DEFAULT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
) ENGINE=InnoDB DEFAULT CHARSET=utf8;

  

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement; public class TestJDBC{
public static void main(String[] args){
final String connectionUrl = "jdbc:mysql://localhost:3306/mybatis";
String userName = "root";
String passWord = "123456";
Connection conn = null;
PreparedStatement ps = null;
     //创建对应时间对象,数据库插入对象时java.sql包下的,
     //为了防止和java.util包下的时间类混淆,所以这里写了完整的路径。
java.sql.Date date = new java.sql.Date(System.currentTimeMillis());
java.sql.Time time = new java.sql.Time(System.currentTimeMillis());
java.sql.Timestamp timestamp = new java.sql.Timestamp(System.currentTimeMillis()); try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(connectionUrl,userName,passWord);
conn.setAutoCommit(false);
ps = conn.prepareStatement("INSERT INTO `mybatis`.`test_date`"
+ "(`date`, `time`, `timestamp`) "
+ "VALUES (?, ?, ?);");
ps.setObject(1, date);//设置时间(年月日)
ps.setObject(2, time);//时分秒
ps.setObject(3, timestamp);//年月日时分秒
ps.execute();
conn.commit();
System.out.println("insert 成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
运行结果:
insert 成功

二、查找数据库中指定时间段的数据

  首先我们建立一个新表test_select_timestamp, 表字段名称及类型如下图所示。

  

  建表语句:

CREATE TABLE `test_select_timestamp` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`tusername` varchar(255) DEFAULT NULL,
`timestamp` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=18001 DEFAULT CHARSET=utf8;

 

 1.在数据库中插入一些数据(日期采用随机生成)

  2.输入查找区间

  3.执行对应SQL语句,返回结果集

  4.遍历结果集

import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.text.DateFormat;
import java.text.ParseException;
import java.text.SimpleDateFormat; import com.mysql.cj.protocol.Resultset; public class TestJDBC{
public static void main(String[] args){
final String connectionUrl = "jdbc:mysql://localhost:3306/mybatis";
String userName = "root";
String passWord = "123456";
Connection conn = null;
PreparedStatement ps = null; try {
Class.forName("com.mysql.cj.jdbc.Driver");
conn = DriverManager.getConnection(connectionUrl,userName,passWord);
conn.setAutoCommit(false);
ps = conn.prepareStatement("INSERT INTO `mybatis`.`test_select_timestamp`"
+ "(`tusername`, `timestamp`) "
+ "VALUES ( ?, ?);");
//随机插入数据, 语句对象,插入条数
randomInsertTime(ps,2000);//随机插入2000条不同的时间数据
//根据指定时间区间查找内容
ResultSet rs = findSpecifyTime(conn,"2019-1-11 00-00-00","2019-1-11 20-00-00");
conn.commit();
//输出结果集
while(rs.next()){
System.out.println(rs.getInt(1) +"--" + rs.getString(2) + "--" + rs.getTimestamp(3));
}
System.out.println("select 成功");
} catch (ClassNotFoundException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (SQLException e) {
try {
conn.rollback();
} catch (SQLException e1) {
// TODO Auto-generated catch block
e1.printStackTrace();
}
// TODO Auto-generated catch block
e.printStackTrace();
}
}
//插入dateNum条数据,日期随机
public static void randomInsertTime(PreparedStatement ps,int dateNum) throws SQLException{
for (int i = 0; i <dateNum;i++){
long randTime = (long)(Math.random()*100000000);
       //系统获取当前时间减去一个随机数
java.sql.Timestamp timestamp = new java.sql.Timestamp(System.currentTimeMillis()-randTime);
ps.setObject(1, "hcf"+i);
ps.setObject(2, timestamp);
ps.execute();
}
} //将yyyy-MM-dd hh-mm-ss格式的字符串转为代表对应时间对象的long型数据
public static long stringToDateLong(String ts){
DateFormat df = new SimpleDateFormat("yyyy-MM-dd hh-mm-ss");
try {
return df.parse(ts).getTime();
} catch (ParseException e) {
// TODO Auto-generated catch block
e.printStackTrace();
return 0;//异常返回0
}
} //寻找时间在start-end之间的数据,返回查找结果集
public static ResultSet findSpecifyTime(Connection conn,String start,String end) throws SQLException{
PreparedStatement ps = conn.prepareStatement("select * from test_select_timestamp "
+ "where timestamp >? and timestamp<?");
     //根据字符串转换成的long型数据,构造Timestamp对象,设置查询参数
ps.setObject(1, new java.sql.Timestamp(stringToDateLong(start)));
ps.setObject(2, new java.sql.Timestamp(stringToDateLong(end)));
ResultSet rs = ps.executeQuery();
conn.commit();
return rs;
}
运行结果:
16001--hcf0--2019-01-11 16:26:28.0
16004--hcf3--2019-01-11 11:31:46.0
16006--hcf5--2019-01-11 15:45:16.0
16008--hcf7--2019-01-11 17:12:24.0
.
.
.//后面还有很多数据就不一一列出了
select 成功

上述代码先插入指定条数据,接着输入查找时间区间的字符串形式,之后将字符串转换为对应时间对象所代表的long型数据。

然后将这个long型数据作为构造Timestamp对象的参数,最后根据Timestamp对象和SQL语句在数据库中查询并得到结果集。

10.3(Java学习笔记)JDBC时间操作的更多相关文章

  1. java学习笔记07--日期操作类

    java学习笔记07--日期操作类   一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...

  2. Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作

    必须的准备工作 一.MySQL的安装.可以参考博文: http://blog.csdn.net/jueblog/article/details/9499245 二.下载 jdbc 驱动.可以从在官网上 ...

  3. 学习笔记-JDBC连接数据库操作的步骤

    前言 这里我就以JDBC连接数据库操作查询的步骤作以演示,有不到之处敬请批评指正! 一.jdbc连接简要步骤 1.加载驱动器. 2.创建connection对象. 3.创建Statement对象. 4 ...

  4. Java学习笔记--JDBC数据库的使用

    参考  hu_shengyang的专栏 : http://blog.csdn.net/hu_shengyang/article/details/6290029 一. JDBC API中提供的常用数据库 ...

  5. Java学习笔记——JDBC之PreparedStatement类中“预编译”的综合应用

    预编译 SQL 语句被预编译并存储在 PreparedStatement 对象中.然后可以使用此对象多次高效地执行该语句. 预编译的优点 1.PreparedStatement是预编译的,对于批量处理 ...

  6. Java 学习笔记(14)—— 文件操作

    java文件操作主要封装在Java.io.File中,而文件读写一般采用的是流的方式,Java流封装在 java.io 包中.Java中流可以理解为一个有序的字符序列,从一端导向到另一端.建立了一个流 ...

  7. Java学习笔记——JDBC读取properties属性文件

    Java 中的 properties 文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件. 文件的内容是格式是"键=值"(key-valu ...

  8. JAVA学习笔记 -- JDBC及其应用

    一个.准备工作 1.开放SQL Server服务与支持TCP/IP  进一步确认TCPport watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk ...

  9. 【java学习笔记】文件操作

    文件操作 java.io.File ①创建删除文件及目录 ②查看文件及目录属性 ③文件过滤器 (PS:不包括文件读写数据) 1.单个文件 创建单个文件,查看属性,删除单个文件. package tmp ...

  10. java学习笔记——大数据操作类

    java.math包中提供了两个大数字操作类:BigInteger(大整数操作类) BigDecimal(大小数操作类). 大整数操作类:BigInteger BigInteger类构造方法:publ ...

随机推荐

  1. arraylist和array的不同之处

    https://www.cnblogs.com/wangbin2188/p/6524200.html

  2. Docker Community Edition for CentOS

    Docker CE for CentOS Docker CE for CentOS distribution is the best way to install the Docker platfor ...

  3. PHP 抽象类,接口,抽象方法,静态方法

    1.Abstract class(抽象类) 抽象类是指在 class 前加了 abstract 关键字且存在抽象方法(在类方法 function 关键字前加了 abstract 关键字)的类. 抽象类 ...

  4. SpringMVC学习 -- ModelAndView , Model , ModelMap , Map 及 @SessionAttributes 的使用

    输出模型数据: ModelAndView:处理方法返回值类型为 ModelAndView 时 , 其中包含视图和模型信息.方法体即可通过该对象添加模型数据 , 即 SpringMVC 会把 Model ...

  5. Spring学习--用 ASpectJ 注解实现 AOP

    用 AspectJ 注解声明切面: 要在 Spring 中声明 AspectJ 切面 , 只需要在 IOC 容器中将切面声明为 bean 实例.当在 Spring IOC 容器中初始化 AsjectJ ...

  6. Sencha touch中Ext.List的使用及高度自适应

    最近在做 Sencha 的一个项目,需要用到 Ext.List 来列出所需商品及相关信息,平时我们使用 Ext.List 都是使用  fullscreen:true  来设置 List 全屏显示, 但 ...

  7. UVa10288概率

    题意: 每张彩票上印有一张图案,要集齐n个不同的图案才能获奖.输入n,求要获奖购买彩票张数的期望(假设获得每个图案的概率相同). 分析: 假设现在已经有k种图案,令s = k/n,得到一个新图案需要t ...

  8. BZOJ 3994: [SDOI2015]约数个数和

    3994: [SDOI2015]约数个数和 Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 898  Solved: 619[Submit][Statu ...

  9. swift中的尾随闭包的用法

    尾随闭包就是这个函数的最后一个参数是一个闭包,所以规定这个闭包既可以写在函数的参数括号里面,也可以直接放在最后面来使用,就像重新给这个函数定义了一次一样,有些怪,不过用的时候,可以把闭包写在外面的.这 ...

  10. Sublime Text 3 遇到的一些小坑的解决方法

    1.[不停弹出更新框]Sublime Text 3 软件会弹出“Update Available”对话框,点击“Cancel”按钮取消:取消之后还是会频繁出现 解决方法:点击菜单栏“Preferenc ...