一、时间分类

  数据库     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. 安卓和html的互相调用

    1.写html和安卓布局 <Button android:id="@+id/btn" android:layout_width="wrap_content" ...

  2. Bash 实例,第一部分

    您可能要问:为什么要学习 Bash 编程?好,以下是几条令人信服的理由: 已经在运行它 如果查看一下,可能会发现:您现在正在运行 bash.因为 bash 是标准 Linux shell,并用于各种目 ...

  3. mavne问题解决---Dynamic Web Module 2.3 or newer

    一:前沿 maven问题的bug,其实是很烦人的,因为每次都是很纠结的去改这个bug,特别的烦人,这个bug也是使得我纠结了好久的,那个星期五自己搞了几个小时都没有解决下,之后星期一来百度Google ...

  4. 【数据结构】bzoj1455罗马游戏

    Description 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团.最近举行了一次平面几何测试,每个人都得到了一个分数. 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻 ...

  5. 【BZOJ2527】【POI2011】Meteors [整体二分]

    Meteors Time Limit: 60 Sec  Memory Limit: 128 MB[Submit][Status][Discuss] Description 这个星球经常会下陨石雨.BI ...

  6. bzoj 1588 裸平衡树

    //By BLADEVIL #include <cstdio> #include <set> #define inf 1<<30 using namespace s ...

  7. v4l2 Camera详细设置【转】

    转自:http://blog.csdn.net/smilefyx/article/details/39555289 转载自:http://blog.sina.com.cn/s/blog_602f877 ...

  8. UVALIVE 2686 Stargates

    尼玛真深坑合时p[x] = y 就RE,p[y] = x 就AC . #include <map> #include <set> #include <list> # ...

  9. 操作MySQL数据库相关代码

    注意事项: 1.导入驱动包,如我导的是mysql-connector-java-5.1.26-bin.jar 2.修改下面代码中的用户名和密码 3.其中URL为"jdbc:mysql://数 ...

  10. js面向对象编程(二)构造函数的继承(转载)

    Javascript面向对象编程(二):构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继 ...