Java JDBC 操作二进制数据、日期时间
二进制数据
mysql提供了四种类型来存储二进制数据:
- TinyBlob 最多可存储255字节
- Blob 最多可存储65KB
- MediumBlob 最多可存储16MB
- LongBlob 最多可存储4GB
//从properties文件中加载数据库配置
Properties properties = new Properties();
InputStream inputStream = Class.forName("test.Test").getResourceAsStream("/mysql.properties");
properties.load(inputStream); String driver = properties.getProperty("driver");
String url = properties.getProperty("url");
String user = properties.getProperty("user");
String password = properties.getProperty("password"); Class.forName(driver);
Connection connection = DriverManager.getConnection(url, user, password); //插入
String sql1="insert into test_tb (id,blob_col) values (?,?)";
PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
InputStream is = new FileInputStream("resource/a.png");
preparedStatement1.setInt(1,1);
preparedStatement1.setBlob(2,is); //参数是InputStream型
preparedStatement1.executeUpdate(); //查询
String sql2="select blob_col from test_tb where id=?";
PreparedStatement preparedStatement2=connection.prepareStatement(sql2);
preparedStatement2.setInt(1,1);
ResultSet resultSet = preparedStatement2.executeQuery();
if (resultSet.next()){
FileOutputStream os=new FileOutputStream("resource/b.png");
Blob blob = resultSet.getBlob("blob_col");
InputStream binaryStream = blob.getBinaryStream();
byte[] data=binaryStream.readAllBytes();
os.write(data);
} connection.close();
存储的只是文件中的数据,文件名需要使用单独的一列来保存。
一般我们是把文件上传到服务器上,数据库中存储文件路径。如果文件特别小,也可以直接存到数据库中。
日期
mysql中提供了date表示日期,格式:yyyy-mm-dd。
//插入
String sql1 = "insert into test_tb (date_col) values (?)";
PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
Date date1 = new Date(System.currentTimeMillis()); //获取当前日期。使用当前时间的时间戳构造出日期
preparedStatement1.setDate(1,date1);
preparedStatement1.executeUpdate(); //查询
String sql2 = "select date_col from test_tb";
PreparedStatement preparedStatement2 = connection.prepareStatement(sql2);
ResultSet resultSet = preparedStatement2.executeQuery();
while (resultSet.next()){
Date date2 = resultSet.getDate("date_col");
System.out.println(date2);
}
时间
mysql提供了time表示时间,格式:HH:mm:ss,hh是24小时制。
操作方法和日期的相同,把Date换为Time即可,也是使用System.currentTimeMillis()来构造。
与Date不同的是,Time还可以使用new java.util.Date().getTime()来构造。java.util.Date()构造的Date对象既包括当前日期,也包括当前时间。getTime()获取的是long型的时间戳。
日期时间
mysql提供了timestamp、datetime来存储日期时间,使用方式都差不多,格式都是:yyyy-mm-dd HH:mm:ss。
//插入
String sql1 = "insert into test_tb (timestamp_col) values (?)";
PreparedStatement preparedStatement1 = connection.prepareStatement(sql1);
Timestamp timestamp1 = new Timestamp(System.currentTimeMillis()); //也可使用new Date().getTime()来构造
preparedStatement1.setTimestamp(1,timestamp1);
preparedStatement1.executeUpdate(); //查询
String sql2 = "select timestamp_col from test_tb";
PreparedStatement preparedStatement2 = connection.prepareStatement(sql2);
ResultSet resultSet = preparedStatement2.executeQuery();
while (resultSet.next()){
Timestamp timestamps2 = resultSet.getTimestamp("timestamp_col"); Date date=new Date(timestamps2.getTime()); //此句的Date是java.util.Date
System.out.println(date); //Sun Aug 18 18:56:35 CST 2019的形式,不友好 SimpleDateFormat sdf=new SimpleDateFormat("yyyy-mm-dd HH:mm:ss");
String formatDT = sdf.format(timestamps2); //使用指定的格式来格式化,参数可以是Timestamp、long型的时间戳、Date
System.out.println(formatDT); //2019-08-18 19:06:06
}
也可以使用2列来存储,一列存储Date,一列存储Time。
未说明类型的Date、Time、Timestamp,是java.sql包下的。
new Date().getTime()的Date是java.util.Date,默认取当前日期时间,java.sql.Date的构造函数是需要参数的。
datetime、timestamp的异同点
- 存储格式都是yyyy-mm-dd HH:mm:ss
- datetime占用8个字节,timestamp占用4个字节
- 因为占用的字节数不同,能表示的时间日期范围不一样。timestamp:1970-01-01 00:00:01 ~ 2038-01-19 , datetime范围:1000-01-01 00:00:00 ~ 9999-12-31 23:59:59。
很多时候使用timestamp就够了,对数据库空间的利用率高。
有些字段需要使用系统当前时间,比如添加一个用户时,可能要用字段create_time来记录当前时间,设置默认值为now() 即可。
Java JDBC 操作二进制数据、日期时间的更多相关文章
- Java JDBC批处理插入数据操作
在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...
- Java JDBC批处理插入数据操作(转)
在此笔记里,我们将看到我们如何可以使用像Statement和PreparedStatement JDBC API来批量在任何数据库中插入数据.此外,我们将努力探索一些场景,如在内存不足时正常运行,以及 ...
- JAVA中计算两个日期时间的差值竟然也有这么多门道
上半年春招的时候,作为面试官,对于面试表现的不错的同学会要求其写一小段代码看看.题目很简单: 给定一个日期,然后计算下距离今天相差的天数. 本以为这么个问题就是用来活跃面试氛围的,但是结果却让人大跌眼 ...
- Java 之 JDK1.8之前日期时间类
一.JDK1.8之前日期时间类 二. java.lang.System类 System类提供的public static long currentTimeMillis()用来返回当前时间与1970年1 ...
- JAVA IO操作:数据操作流:DataOutputStream和DataInputStream
掌握DataOutputStream和DataInputStream的作用. 可以使用DataOutputStream和DataInputStream写入和读取数据. 在IO包中提供了两个与平台无关的 ...
- JDBC操作MySQL数据
对原始jdbc进行封装 package com.utils; import java.sql.Connection; import java.sql.DriverManager; import jav ...
- Java jdbc 操作数据库详解
原文地址https://www.cnblogs.com/huguodong/p/5910859.html JDBC(Java Data Base Connectivity,java数据库连接)是一种用 ...
- Java基础——常用类之日期时间类
如果有机会,请尝试Java8中全新的时间日期API!(参见Java8新特性随笔) 如果还是使用Java7及之前的版本,那么你可以尝试一些工具类(参考使用工具类相关的Hutool-DateUtil) 如 ...
- java JDBC操作MySQL数据库
一,首先在MYSQL建立一个数据库,例如Geek99DB: create database Geek99DB; use Geek99DB; 然后建立一个表CustomerTab: create tab ...
随机推荐
- matlab-线性回归
1.调用函数regress(Y,X,alpha),plpha是置信度,如果直接用regress(Y,X)则默认置信度为0.05,Y是一个 的列向量,X是一个 的矩阵,其中第一列是全1向量. 2.函数返 ...
- 【redis】设置密码
1.第一种方式 (当前这种linux配置redis密码的方法是一种临时的,如果redis重启之后密码就会失效,) (1)首先进入redis,如果没有开启redis则需要先开启:[root@iZ94jz ...
- Hibernate框架学习3
一对多|多对一 一对多 多对一 级联操作 结论: 简化操作.一定要用,save-update,不建议使用delete. 关系维护 在保存时.两方都会维护外键关系.关系维护两次,冗余了. 多余的维护关系 ...
- 【librosa】及其在音频处理中的应用
[持续更新] display specshow(data[, x_coords, y_coords, x_axis, …]) Display a spectrogram/chromagram/cqt/ ...
- Babel7 转码
ES6 (ES2015)更新了很多新的js语法, 也添加了一些新的API, 但不是所有的浏览器对这些新特性都支持的很好, 通过babel可以高版本的js转成低版本的js (ES 5.1), 同时对于J ...
- Vue实践TS中的一些常见错误解决方案
mixin报错 import { Component, Prop, Vue ,Mixins} from 'vue-property-decorator' import httpminix from ' ...
- nmap 速查手册
0x00:说明 只是一个快速查询手册,理论的东西都没有补充,欢迎大家积极在评论区补充自己常用的参数,O(∩_∩)O 0x01:nmap功能介绍 1.主机存活检测2.端口探测3.服务识别4.操作系统识 ...
- Unix/Linux小计
1. centos查看cpu信息 cat /proc/cpuinfo processor有几个就是有几个cpu,每一列是每个cpu的信息 每个processor中的cores是当前cpu中有几个核心. ...
- ReentrantLock源码简析
概念 ReentrantLock,可重入锁.在多线程中,可以通过加锁保证线程安全. 加锁和解锁 加锁: public void lock() { sync.lock(); } 解锁 public vo ...
- 【RS】Wide & Deep Learning for Recommender Systems - 广泛和深度学习的推荐系统
[论文标题]Wide & Deep Learning for Recommender Systems (DLRS'16) [论文作者] Heng-Tze Cheng, Levent Koc, ...