10.3(Java学习笔记)JDBC时间操作
一、时间分类
数据库 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时间操作的更多相关文章
- java学习笔记07--日期操作类
java学习笔记07--日期操作类 一.Date类 在java.util包中定义了Date类,Date类本身使用非常简单,直接输出其实例化对象即可. public class T { public ...
- Java学习笔记——JDBC之与数据库MySQL的连接以及增删改查等操作
必须的准备工作 一.MySQL的安装.可以参考博文: http://blog.csdn.net/jueblog/article/details/9499245 二.下载 jdbc 驱动.可以从在官网上 ...
- 学习笔记-JDBC连接数据库操作的步骤
前言 这里我就以JDBC连接数据库操作查询的步骤作以演示,有不到之处敬请批评指正! 一.jdbc连接简要步骤 1.加载驱动器. 2.创建connection对象. 3.创建Statement对象. 4 ...
- Java学习笔记--JDBC数据库的使用
参考 hu_shengyang的专栏 : http://blog.csdn.net/hu_shengyang/article/details/6290029 一. JDBC API中提供的常用数据库 ...
- Java学习笔记——JDBC之PreparedStatement类中“预编译”的综合应用
预编译 SQL 语句被预编译并存储在 PreparedStatement 对象中.然后可以使用此对象多次高效地执行该语句. 预编译的优点 1.PreparedStatement是预编译的,对于批量处理 ...
- Java 学习笔记(14)—— 文件操作
java文件操作主要封装在Java.io.File中,而文件读写一般采用的是流的方式,Java流封装在 java.io 包中.Java中流可以理解为一个有序的字符序列,从一端导向到另一端.建立了一个流 ...
- Java学习笔记——JDBC读取properties属性文件
Java 中的 properties 文件是一种配置文件,主要用于表达配置信息,文件类型为*.properties,格式为文本文件. 文件的内容是格式是"键=值"(key-valu ...
- JAVA学习笔记 -- JDBC及其应用
一个.准备工作 1.开放SQL Server服务与支持TCP/IP 进一步确认TCPport watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvdTAxMjk ...
- 【java学习笔记】文件操作
文件操作 java.io.File ①创建删除文件及目录 ②查看文件及目录属性 ③文件过滤器 (PS:不包括文件读写数据) 1.单个文件 创建单个文件,查看属性,删除单个文件. package tmp ...
- java学习笔记——大数据操作类
java.math包中提供了两个大数字操作类:BigInteger(大整数操作类) BigDecimal(大小数操作类). 大整数操作类:BigInteger BigInteger类构造方法:publ ...
随机推荐
- 安卓和html的互相调用
1.写html和安卓布局 <Button android:id="@+id/btn" android:layout_width="wrap_content" ...
- Bash 实例,第一部分
您可能要问:为什么要学习 Bash 编程?好,以下是几条令人信服的理由: 已经在运行它 如果查看一下,可能会发现:您现在正在运行 bash.因为 bash 是标准 Linux shell,并用于各种目 ...
- mavne问题解决---Dynamic Web Module 2.3 or newer
一:前沿 maven问题的bug,其实是很烦人的,因为每次都是很纠结的去改这个bug,特别的烦人,这个bug也是使得我纠结了好久的,那个星期五自己搞了几个小时都没有解决下,之后星期一来百度Google ...
- 【数据结构】bzoj1455罗马游戏
Description 罗马皇帝很喜欢玩杀人游戏. 他的军队里面有n个人,每个人都是一个独立的团.最近举行了一次平面几何测试,每个人都得到了一个分数. 皇帝很喜欢平面几何,他对那些得分很低的人嗤之以鼻 ...
- 【BZOJ2527】【POI2011】Meteors [整体二分]
Meteors Time Limit: 60 Sec Memory Limit: 128 MB[Submit][Status][Discuss] Description 这个星球经常会下陨石雨.BI ...
- bzoj 1588 裸平衡树
//By BLADEVIL #include <cstdio> #include <set> #define inf 1<<30 using namespace s ...
- v4l2 Camera详细设置【转】
转自:http://blog.csdn.net/smilefyx/article/details/39555289 转载自:http://blog.sina.com.cn/s/blog_602f877 ...
- UVALIVE 2686 Stargates
尼玛真深坑合时p[x] = y 就RE,p[y] = x 就AC . #include <map> #include <set> #include <list> # ...
- 操作MySQL数据库相关代码
注意事项: 1.导入驱动包,如我导的是mysql-connector-java-5.1.26-bin.jar 2.修改下面代码中的用户名和密码 3.其中URL为"jdbc:mysql://数 ...
- js面向对象编程(二)构造函数的继承(转载)
Javascript面向对象编程(二):构造函数的继承 这个系列的第一部分,主要介绍了如何"封装"数据和方法,以及如何从原型对象生成实例. 今天要介绍的是,对象之间的"继 ...